隨手科技(隨手記)2017招聘Java工程師筆試題

一  如何解決多臺web服務器粘性會話的問題?html

粘性session:web服務器會把某個用戶的請求,交給tomcat集羣中的一個節點,之後此節點就負責該保存該用戶的session,若是此節點掛掉,那麼該用戶的session也會消失。
非粘性session:經過負載均衡器會根據節點的狀況,把用戶的請求進行分發,也就是會複製多份session分發給多個節點,這樣,若是節點中其中一個session掛掉的話,其它的還能繼續工做,也就是隻要有一個節點沒有掛掉,該用戶的信息就不會消失:mysql

1. 利用Memcache/Redis共享Session數據:搭建Memcache/Redis集羣,將用戶Session寫入Memcache/Redis,設置key值的有效期,即Session的有效期。通常來講緩存的併發性能高於數據庫,這個方法能夠得到較大的負載量web

2 利用數據庫共享Session數據:建立一個數據庫庫專門存放用戶Session,用戶登陸一次插入一條數據(若是第一次登陸),並由程序去維護Session的時效性。這個作法的弊端是,數據庫的負擔很大並且原本就是容易產生瓶頸的地方,日活的增長致使性能問題。算法

二  假如某項目上線後,系統常常出現宕機或者假死,請問應該從哪幾個方面去分析解決?sql

三  描述一下常見一些hash算法的應用場景數據庫

1. 校驗安裝文件的完整性,在軟件部署的時候,計算軟件包當前的哈希值是否與預設值相等,防止軟件包被篡改或被替換
2. 存儲和校驗用戶口令,用戶口令不能用明文存儲,更進一步,若是系統不知道用戶口令明文,那就更好了,而哈希算法就能夠作到既不知道用戶明文,又能夠校驗用戶口令
3. 做爲數據庫表分區的分區條件緩存

四  假若有100W個敏感詞彙表,如何從一段網絡文章裏快速找出是否存在敏感詞。tomcat

http://www.javashuo.com/article/p-rtasjgak-er.html安全

五  請描述ThreadLocal的做用以及使用場合,在程序中用來傳遞數據合適不合適?服務器

  ThreadLocal並非一個Thread,而是Thread的局部變量。針對每一個線程提供本身的變量版本,每一個線程維護本身的版本,彼此獨立,修改不會影響到對方,避免線程衝突。譬如在Web開發中,存放一次請求的Context。在程序中傳遞數據是不合適的,ThreadLocal攜帶多個線程變量版本,傳遞數據浪費性能

六  請描述一下系統信息安全方面的一些常見攻擊手段與預防方法?

1 口令破解:能夠採用字典破解和暴力破解來得到口令。

2 IP欺騙::攻擊者能夠經過假裝成被信任的IP地址等方式來獲取目標的信任。這主要是針對防火牆的IP包過濾以及LINUX/UNIX下創建的IP地址信任關係的主機實施欺騙。 

3 DNS欺騙:因爲DNS服務器相互交換信息的時候並不創建身份驗證,這就使得黑客可使用錯誤的信息將用戶引向錯誤主機。 

5 DdoS攻擊 :DdoS攻擊(Distributed Denial of Server,分佈式拒絕服務)是一種基於DOS的特殊形式的拒絕服務攻擊,是一種分佈協做的大規模攻擊方式,主要瞄準比較大的站點,像商業公司、搜索引擎和政府部門的站點。他利用一批受控制的機器向一臺目標機器發起攻擊,這樣來勢迅猛的攻擊使人難以防備,所以具備很大的破壞性。 

6 緩衝區溢出攻擊(buffer overflow)
經過往程序的緩衝區寫超過其長度的內容,形成緩衝區的溢出,從而破壞程序的堆棧,使程序轉而執行其餘指令,以達到攻擊的目的。緩衝區溢出是一種很是廣泛、很是危險的漏洞,在各類操做系統、應用軟件中普遍存在,根據統計:經過緩衝區溢出進行的攻擊佔全部系統攻擊總數的80%以上。利用緩衝區溢出攻擊能夠致使程序運行失敗、系統死機、從新啓動等後果,更嚴重的是,能夠利用他執行非受權的指令,甚至能夠取得系統特權,進而進行各類非法操做。因爲他歷史悠久、危害巨大,被稱爲數十年來攻擊和防衛的弱點。
社交工程(Social Engineering)

七  請列舉幾個Linux常見命令:

實時查看服務器日誌文件內容

tail -f 

修改文件用戶全部者以及所在組

chown命令來改變文件全部者:chown [-R] 帳號名稱 文件或目錄
chgrp命令來改變文件所屬用戶組:chgrp [-R] 用戶組名稱 文件或目錄

查看服務器內存使用狀況

 free 

查找進程名稱包括tomcat的進程ID

ps -ef|grep tomcat

查看服務器磁盤空間使用狀況

 dh -f

查看服務器IO壓力狀況

 top

檢測鏈接到服務器每一個節點的鏈接速度

netstat -an

建立一個/local/usr/mysql/dbfile到/data/mysql/dbfile目錄的軟連接  

 ln -s /local/usr/mysql/dbfile/   /data/mysql/dbfile/

八  在多服務器集羣部署的狀況下,如何避免併發帶來的問題,好比一個理財產品剩餘金額爲10000,如何應對搶購?

解決秒殺搶購類的關鍵思路是:儘可能將請求攔截在系統上游,減輕數據庫壓力

1 最簡單的方式是採用數據庫事務處理,因爲數據庫併發量有效,沒法應對極大流量的搶購

當某用戶進入搶購時,假定一個用戶只能搶購一份,執行事務僞代碼以下:

begin transaction;

select balace from 產品表 where product_id = xx for update;

if(balace<1) return;

...建立訂單

update 產品表 set balace=balace-1;

end transaction;

2 採用Redis的事務功能和Watch特性,能夠承受較大併發量

http://blog.csdn.net/e421083458/article/details/49741451

 http://www.cnblogs.com/longtaosoft/p/6627568.html

九 Java中自帶哪些線程池,分別的應用場景是什麼?

Java經過Executors提供四種線程池,分別爲:
newCachedThreadPool建立一個可緩存線程池,若是線程池長度超過處理須要,可靈活回收空閒線程,若無可回收,則新建線程。
newFixedThreadPool 建立一個定長線程池,可控制線程最大併發數,超出的線程會在隊列中等待。
newScheduledThreadPool 建立一個定長線程池,支持定時及週期性任務執行。
newSingleThreadExecutor 建立一個單線程化的線程池,它只會用惟一的工做線程來執行任務,保證全部任務按照指定順序(FIFO, LIFO, 優先級)執行

http://cuisuqiang.iteye.com/blog/2019372

http://www.importnew.com/16797.html

十  mysql數據庫有如下三個表及字段說明

Columns of "Person" Table,人員表
Column Name DataType Comment
 pcode  int  人員代碼,主鍵
name varchar(100) 姓名
gender varchar(10) 性別
age int 年齡
org_code int 所在單位的單位代碼,外鍵
email varchar(100) 電子郵件

 

Columns of "Organization" Table,單位表
Column Name DataType Comment
org_code int 單位代碼,主鍵
name varchar(100) 單位名稱
province varchar(100) 單位所在省份或者直轄市

 

Columns of "UserGroup" Table,人員角色表
Column Name DataType Comment
pcode int 人員代碼
group_no varchar(10) 角色碼,「20」:項目負責人,「10」:單位聯絡人

 

A 因爲深圳大學的郵箱發生變動,須要緊急將深圳大學全部單位聯絡人的郵箱(eg:zhangshan@szdx.edu.cn),域名"szdx.edu.cn"從替換成"szu.edu.cn",請寫出SQL語句

update person set email = replace(email, 'szdx,edu.cn', 'szu.edu.cn') 
where email like '%szdx.edu.cn' and org_code in (select org_code from organization where name = '深圳大學') and pcode in (select pcode from usergroup where group_no = '10')

B 如今要查詢出北京市每一個單位的單位聯絡人平均年齡,請寫出SQL語句,結果輸出:單位代碼,單位名稱,平均年齡

select p.org_code as 單位代碼,o.name as 單位代碼, avg(p.age) as 平均年齡 from person p left join organization o on p.org_code = o.org_code where pcode in (select pcode from usergroup where group_no = '10')
group by o.org_code

C 統計全國每一個單位的項目負責人年齡小於40歲的人數,結果輸出:單位代碼,單位名稱,人數

select p.org_code as 單位代碼,o.name as 單位代碼, count(p.age) as 人數 from person p left join organization o on p.org_code = o.org_code where pcode in (select pcode from usergroup where group_no = '20')  and p.age < 40
group by o.org_code
相關文章
相關標籤/搜索