javasql面試
SELECTTOP10u.name,u.age,allin=isnull((SELECTsum(t.number*p.buyprice)FROMTEST_PRODECTp,TEST_TREEDt
WHEREp.type=t.ptypeANDt.uid=u.useridANDt.BUY_OR_SALE='BUY'),0),
allout=isnull((SELECTsum(t.number*p.saleprice)FROMTEST_PRODECTp,TEST_TREEDt
WHEREp.type=t.ptypeANDt.uid=u.useridANDt.BUY_OR_SALE='SALE'),0)
,
realin=(isnull((SELECTsum(t.number*p.buyprice)FROMTEST_PRODECTp,TEST_TREEDt
WHEREp.type=t.ptypeANDt.uid=u.useridANDt.BUY_OR_SALE='BUY'),0)-isnull((SELECTsum(t.number*p.saleprice)FROMTEST_PRODECTp,TEST_TREEDt
WHEREp.type=t.ptypeANDt.uid=u.useridANDt.BUY_OR_SALE='SALE'),0))
FROMTEST_USERu
ORDERBY(isnull((SELECTsum(t.number*p.buyprice)FROMTEST_PRODECTp,TEST_TREEDt
WHEREp.type=t.ptypeANDt.uid=u.useridANDt.BUY_OR_SALE='BUY'),0)-isnull((SELECTsum(t.number*p.saleprice)FROMTEST_PRODECTp,TEST_TREEDt
WHEREp.type=t.ptypeANDt.uid=u.useridANDt.BUY_OR_SALE='SALE'),0))DESC
第2題答案
經過測試無誤
Ⅱ java 。資料庫,面試題,如下圖,求SQL
select 姓名, sum(成績) as 總成績
from ...
group by 姓名
order by 總成績
Ⅲ java面試題的sql查詢題
這個根據不同企業,不同設計師的命名規范來的,通常設計師都希望看其名知其意
Ⅳ java,oracle面試題,如下,sql怎麼寫
如題我先進行分析:
第一句話中按月找出平均 填寫時間大於3天的人員信息 :
那麼可用理解為 根據月份查找 員工平均延遲填寫日期大於3天的 人員信息。
第二句話一個人員的日誌填寫日期有多條則取最早的一條,如果有一天未填寫,則取系統當前時間,不含小時。
以上這句話需要注意兩點 第一點,取最早的一條此處需要用到ROW_NUMBER() OVER() 以及未填寫 則取系統當前時間 不含小時 那麼取值格式應為yyyy-mm-dd此處需要處理格式。
根據以上分析提供如下SQL: 註:(以下SQL已ORACLE為例)
--創建臨時表存儲數據
withemp_logas(
select1asempno,'張一'asempname,'工作內容1'asworkcontent,date'2017-03-20'asbegdate,date'2017-03-23'asentrydate,1asnumfromal
unionall
select1asempno,'張一'asempname,'工作內容2'asworkcontent,date'2017-03-20'asbegdate,date'2017-03-23'asentrydate,2asnumfromal
unionall
select1asempno,'張一'asempname,'工作內容3'asworkcontent,date'2017-03-20'asbegdate,date'2017-03-24'asentrydate,5asnumfromal
unionall
select1asempno,'張一'asempname,'工作內容1'asworkcontent,date'2017-03-24'asbegdate,date'2017-03-30'asentrydate,8asnumfromal
unionall
select2asempno,'張二'asempname,'工作內容21'asworkcontent,date'2017-03-20'asbegdate,date'2017-03-30'asentrydate,8asnumfromal
unionall
select2asempno,'張二'asempname,'工作內容22'asworkcontent,date'2017-03-25'asbegdate,date'2017-03-28'asentrydate,8asnumfromal
unionall
select3asempno,'張三'asempname,'工作內容31'asworkcontent,date'2017-03-20'asbegdate,nullasentrydate,nullasnumfromal
unionall
select3asempno,'張三'asempname,'工作內容32'asworkcontent,date'2017-03-20'asbegdate,nullasentrydate,nullasnumfromal
unionall
select4asempno,'張四'asempname,'工作內容42'asworkcontent,date'2017-03-25'asbegdate,date'2017-03-28'asentrydate,8asnumfromal
)
select*from(
selectempno,empname,sum(num)num,sum(yanci)/count(empno)pingjunyanci--獲取人員當月總延遲數除去當月人員每日的打開數計算出當月每天的平均延遲天數
from(selectROW_NUMBER()OVER(PARTITIONBYe.empno,e.begdateORDERBYe.empno,e.begdate)ASRN,--排序獲取當天有多條記錄並在後面條件中獲取第一條
e.empno,e.empname,
e.workcontent,e.begdate,
e.entrydate,
e.num,
(nvl(e.entrydate,to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd'))-begdate)asyanci--判斷如果沒有填寫結束日期那麼以系統當前日期進行運算延遲日期
fromemp_loge)e1
wheree1.rn=1--獲取第一條
andto_char(begdate,'yyyy-mm')='2017-03'--可用的月份條件
groupbyempno,empname,numorderbyempno--根據人員工號、人員姓名分組匯總
)e2wheree2.pingjunyanci>3;
--分析不易忘認真閱讀後採納,有其他問題請追問我。
Ⅳ java面試題求助
第一個問題:select a.姓名,a.薪水,b.薪水級別,count(b.Salclass) from (select * from 員工表 where empid=1) a left join 薪水級別表 b on a.EmpSal = b.MaxSal
樓主可以試一下。我提供點思路。平均工資我沒想明白。一個人的平均工資怎麼求。。。
第二題就是一個設計模式只要滿足它的要求就行比如:
public class Singleton {
private Singleton(){}
//在自己內部定義自己一個實例,是不是很奇怪?
//注意這是private 只供內部調用
private static Singleton instance = new Singleton();
//這里提供了一個供外部訪問本class的靜態方法,可以直接訪問
public static Singleton getInstance() {
return instance;
}
}
Ⅵ java開發面試難嗎應該注意啥
與正常面試一樣,首先需要進行自我介紹、所學專業、在校期間參加的比賽以及項目經驗,其中項目經驗是最重要的,因為java開發主要就是技術支持,如果你寫過好的程序相應的也得過一些獎勵,不過這些獎勵最好是有點代表性的,比如ACM地區賽、國家賽這類的,勢必會對你的面試有所幫助
無論你是否為學計算機、軟體開發等專業的學生,面試官都會問你為什麼會選擇IT行業,如果你是女生,開發本來就是重男輕女的活,面試官可能會問壓力方面、今後婚姻方面以及你將如何在同行業中獲得競爭優勢等等一系列問題;
之後就是考專業性的了,會不會JSP框架,繼承這個類那個類有什麼區別,Java中的IO類怎麼怎麼樣的,或者說是如果讓你開發軟體你該怎麼進行設計等,口頭上考的專業性的東西應該不太多,因為正常開發都會有筆試,除非是面試特別高端的企業(比如IBM)。
對了,有筆試的話如果你的筆試成績不錯那還好,如果筆試成績打的擦邊球,那面試官就會以你專業性不夠扎實對你進行刁難,這個有點准備。
Ⅶ Java面試題,基本都是Java基礎題目,大家看看咋做
以Oracle為例吧
Statement為一條Sql語句生成執行計劃,
如果要執行兩條sql語句
select colume from table where colume=1;
select colume from table where colume=2;
會生成兩個執行計劃
一千個查詢就生成一千個執行計劃!
PreparedStatement用於使用綁定變數重用執行計劃
select colume from table where colume=:x;
通過set不同數據只需要生成一次執行計劃,可以重用
是否使用綁定變數對系統影響非常大,生成執行計劃極為消耗資源
兩種實現 速度差距可能成百上千倍
1.PreparedStatement是預編譯的,對於批量處理可以大大提高效率.也叫JDBC存儲過程
2.使用 Statement 對象。在對資料庫只執行一次性存取的時侯,用 Statement 對象進行處理。PreparedStatement對象的開銷比Statement大,對於一次性操作並不會帶來額外的好處。
3.statement每次執行sql語句,相關資料庫都要執行sql語句的編譯,preparedstatement是預編譯得,preparedstatement支持批處理
4.PreparedStatement對象不僅包含了SQL語句,而且大多數情況下這個語句已經被預編譯過,因而當其執行時,只需DBMS運行SQL語句,而不必先編譯。當你需要執行Statement對象多次的時候,PreparedStatement對象將會大大降低運行時間,當然也加快了訪問資料庫的速度。
5.執行許多SQL語句的JDBC程序產生大量的Statement和PreparedStatement對象。通常認為PreparedStatement對象比Statement對象更有效,特別是如果帶有不同參數的同一SQL語句被多次執行的時候。PreparedStatement對象允許資料庫預編譯SQL語句,這樣在隨後的運行中可以節省時間並增加代碼的可讀性。
第一:
prepareStatement會先初始化SQL,先把這個SQL提交到資料庫中進行預處理,多次使用可提高效率。
createStatement不會初始化,沒有預處理,沒次都是從0開始執行SQL
第二:
prepareStatement可以替換變數
在SQL語句中可以包含?,可以用ps=conn.prepareStatement("select* from Cust where ID=?");
int sid=1001;
ps.setInt(1, sid);
rs = ps.executeQuery();
可以把?替換成變數。
而Statement只能用
int sid=1001;
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from Cust where ID="+sid);
來實現。
第三:
prepareStatement會先初始化SQL,先把這個SQL提交到資料庫中進行預處理,多次使用可提高效率。
createStatement不會初始化,沒有預處理,沒次都是從0開始執行SQL
1. truncate和 delete只刪除數據不刪除表的結構(定義) drop語句將刪除表的結構被依賴的約束(constrain),觸發器(trigger),索引(index); 依賴於該表的 存儲過程/函數將保留,但是變為invalid狀態. 2.delete語句是dml,這個操作會放到rollback segement中,事務提交之後才生效;如果有相應的trigger, 執行的時候將被觸發. truncate,drop是ddl, 操作立即生效,原數據不放到rollback segment中,不能回滾. 操作不觸發 trigger. 3.delete語句不影響表所佔用的extent, 高水線(high watermark)保持原位置不動 顯然drop語句將表所佔用的空間全部釋放 truncate 語句預設情況下見空間釋放到 minextents個 extent,除非使用reuse storage; truncate 會將高水線復位(回到最開始). 4.速度,一般來說: drop> truncate > delete 5.安全性:小心使用drop 和truncate,尤其沒有備份的時候.否則哭都來不及. 使用上,想刪除部分數據行用delete,注意帶上where子句. 回滾段要足夠大. 想刪除表,當然用drop 想保留表而將所有數據刪除. 如果和事務無關,用truncate即可. 如果和事務有關,或者想觸發trigger,還 是用delete. 如果是整理表內部的碎片,可以用truncate跟上reuse stroage,再重新導入/插入數據/
Ⅷ 面試java程序員,PL/SQL學到什麼程度可以過關
既然是Java程序員,CRUD語句熟悉,一些關聯查詢,基本的存儲過程和觸發器知道就行了,不用太深
Ⅸ 面試Java開發時問到高並發怎麼處理的,還有sql優化有哪些辦法,有哪位大神知道啊,新手!!
Java開發高並發的處理方法:
最基礎的地方做起,優化我們寫的代碼,減少必要的資源浪費
避免頻繁的使用new對象,對於整個應用只需要存在一個實例的類,我們可以使用單例模式。對於String連接操作,使用StringBuffer或StringBuilder,對於工具類可以通過靜態方法來訪問。
避免使用錯誤的方式,盡量不用instanceof做條件判斷。使用java中效率高的類,比如ArrayList比Vector性能好。
圖片伺服器分離
對於web伺服器來說,圖片是最消耗資源的,於是我們有必要把圖片與頁面進行分離,我們把圖片放到獨立的圖片伺服器。這樣的架構可以降低提供頁面訪問請求的伺服器系統壓力,並且可以保證系統不會因為圖片的問題而崩潰。在圖片伺服器上,我們可以對不同的配置進行優化。
具體接觸過的緩存機制是hibernate的緩存機制。為了避免每次都向資料庫中取得數據,我們把用戶常常訪問到的數據放到內存中,甚至緩存十分大的時候我們可以把內存中的緩存放到硬碟中。還有高級的分布式緩存資料庫使用,都可以增加系統的抗壓力。
分批傳送
在做某項目的時候,一次傳遞的參數太多,而且資料庫規定一次最多傳遞的參數最多是三萬條,當時有五萬條記錄,那怎麼傳送呢?最終是分批傳送,電梯里一次乘不下那麼多的人,會報超重的bug,那就分批把人送上去。
還有一次在考試系統中,如果那麼多的考試人員同時提交到資料庫中,資料庫的壓力增大,有時會被down掉,當時採用的方法是使用ajax非同步傳輸,沒有等待考生點擊提交按鈕的時候,就把考生的答案自動提交,這樣也避免了突然斷電考生前面做過的題出現丟失的現象。
DB優化
在資料庫設計的時候就要考慮到後期的維護,資料庫三範式是我們設計資料庫索要遵循的原則。
索引的建立:建立索引要適當,如果一個表經常用來被查詢,對於增加和修改很少被用到,我們就可以為這個表建立索引,因為對於增加和修改和刪除操作時,我們對索引的維護要大大超過索引給我們帶來的效率。
表欄位的類型選擇要恰當。包括欄位的長度、類型等,要根據實際存儲的數據進行選擇,長度不要過長,否則會影響效率。
外鍵要慎用,因為主鍵代表這一張表,而外鍵代表一群表,對表之間進行了關聯,在刪除修改等需要我們關聯。
在資料庫操作上。 盡量使用prepareStatement,少用Statement,因為PrepareStatement是進行預編譯的。
connection設置為readOnly,Connection是對書庫連接,屬於重量級,我們使用即可。
連接池的使用,我們可以修改資料庫默認的連接數。
Ⅹ JAVA和SQL面試題
(2)查詢B列中長度大於2的記錄,結果為
A B
1 abc
可能么? 1對應a 而不是abc
--> 生成測試數據: @T
DECLARE @T TABLE (A INT,B VARCHAR(3))
INSERT INTO @T
SELECT 1,'a' UNION ALL
SELECT 2,'b' UNION ALL
SELECT 3,'abc' UNION ALL
SELECT 4,'c' UNION ALL
SELECT 5,'a' UNION ALL
SELECT 6,'b' UNION ALL
SELECT 7,'ba'
--SQL查詢如下:
select min(A) as A,B from @T group by B having count(*) > 1
select * from @T where len(B) > 2
select * from @T where B like '%A%' and B like '%B%'
/*
A B
----------- ----
1 a
2 b
(2 行受影響)
A B
----------- ----
3 abc
(1 行受影響)
A B
----------- ----
3 abc
7 ba
(2 行受影響)
*/