/** * ############ * 變強是會掉光頭髮的!如今的頭髮仍是很茂盛,是該開心仍是難過呢。。 * ############ * /
總結下近期面試龍騰簡合-java開發崗的經歷。附上筆試、技術面試題以及相應的題解。有些題目記憶有點模糊了,這裏就大概描述下。html
我先作我的說明, 學歷非雙福州普通二本計算機專業,畢業兩年多,近期因我的緣由想換工做,體驗下其餘IT公司的氛圍。前端
廢話少說,開始進入正題。vue
整個過程分三個步驟:java
============================= node
============================= mysql
1、在線筆試react
一開始是在boss直聘軟件上,龍騰簡合HR小姐姐主動溝通,加上本身本意有想去龍騰的想法,就簡單的聊了幾句,併發送我的簡歷給HR。HR看了後,就溝通安排在線筆試了。linux
在線筆記有視頻監考,做爲誠實本分的孩子是不會做弊的!(′▽`〃)
程序員
一共有16道題,涉及js正則表達 、算法、數據庫、linux命令、springboot、集合線程、前端react、promise原理、nodejs加載json方式、Mybatis。(技術渣渣表示想哭╥﹏╥...)web
一、有正則表達式:/^[a-zA-Z]+$/,判斷alert((/^[a-zA-Z]+$/.test(null))); 和 alert((/^[a-zA-Z]+$/.test())); 輸出的是什麼?
解答:這道爲選擇題,考察正則表達式基礎。該表達式爲判斷字符串是否所有爲字母。用法(/^[a-zA-Z]+$/.test(element)),這裏 element 是能夠爲null或爲空,因此輸出爲true、true.
小夥伴可本身編寫測試下,加深記憶。
二、linux如何後臺重啓個jar程序包, 命名爲test.jar
解答:熟悉nohup命令的小朋友應該很容易上手。這題主要分兩步:
第一步找到正在運行的test.jar進程,並kill掉該進程;第二步後臺重啓。
1 $ ps -ef | grep test 2 xxxx 1824 0 21:54 pts/0 00:00:00 xxx xxxx 3 & kill -9 1824 4 $nohup java -jar test.jar &
//nohup 意思是不掛斷運行命令,當帳戶退出或終端關閉時,程序仍然運行
//固然,後臺啓動jar還有其餘方式,好比 java -jar shareniu.jar & , 其中 & 表示後臺啓動。
三、有36輛賽車6條跑道,在沒有計時器的狀況下,須要最少比賽多少輪才能選出最快的前3輛?
解答:考察邏輯思惟題。 總共須要8次。 參考:http://www.mamicode.com/info-detail-2267257.html
這裏我說一次個人對這道題的理解:
到這一步能夠肯定第一名是哪一車,這裏假定第一名爲車A1, 接下來要肯定哪輛車是第二名和第三名。這裏只要簡單分析下,就能淘汰掉車C二、車C3和車B2。
淘汰車C2和C3的理由:車A1 > 車B2>車C3>車C2>車C3;
淘汰車B2的理由:車A1>車B1>車B2>車B3
所以,須要 6+ 1+ 1 =8 輪,才能選取最快的3輛。
四、解釋下React state 和React props
參考:https://baijiahao.baidu.com/s?id=1627980825860407519&wfr=spider&for=pc
解答:工做兩三年未使用和學習過前端react,好奇龍騰使用的前端是Vue。爲啥會考react方面的知識.雖然也沒用過vue,任職公司使用的Angular4..π__π
react state: React 把組件當作是一個狀態機(State Machines)。經過與用戶的交互,實現不一樣狀態,而後渲染 UI,讓用戶界面和數據保持一致。React裏,只需更新組件的 state,而後根據新的 state 從新渲染用戶界面(不要操做 DOM)。
參考:https://www.runoob.com/react/react-state.html
react props:Props是Properties的簡寫。它們是隻讀組件,工做方式相似於HTML屬性。Prop是一種將數據從父組件傳遞給子組件的方法。
具體深刻的內容,我也不太瞭解,小夥伴們可自行google/百度。
五、編寫js函數,有兩個參數一個時間字符,一個小時增減量,傳入時間如 2018-10-10 01:00:00,和小時節點增長量 3,函數輸出 2018-10-10 04:00:00
解答:熟悉js時間與字符串轉換、時間操做的小夥伴們,應該是很容易的。 做爲一個 ctrl+c 和 ctrl+v 的程序員感動心累( -'`-; )
1 /* 2 對時間進行操做 3 */ 4 function t(d, num) { 5 var t = new Date(d.replace(/-/g, '/')); 6 t.setTime(t.setHours(t.getHours() + num)); 7 var dataStr = (t.getFullYear()) + '-' + (fillZero(t.getMonth() + 1)) 8 + '-' + (fillZero(t.getDate())) + ' ' + (fillZero(t.getHours())) + ':' + (fillZero(t.getMinutes())) + ':' + (fillZero(t.getSeconds())) 9 alert(dataStr); 10 } 11 /* 12 時間字段前補0 13 */ 14 function fillZero(num) { 15 if (num < 10) { 16 return '0' + num; 17 } 18 return num; 19 }
t("2018-10-10 01:00:00", -3);
六、解釋下什麼是primose,並寫一個primise
解答:屬於ES6範圍,primose做用:
一、主要用於異步計算;
二、能夠將異步操做隊列化,按照指望的順序執行,返回符合預期的結果;
三、能夠在對象之間傳遞和操做promise,幫助咱們處理隊列。
Promise最大的好處是在異步執行的流程中,把執行代碼和處理結果的代碼清晰地分離了,Promise還能夠作更多的事情,好比,有若干個異步任務,須要先作任務1,若是成功後再作任務2,任何任務失敗則再也不繼續並執行錯誤處理函數。要串行執行這樣的異步任務,不用Promise須要寫一層一層的嵌套代碼。有了Promise,咱們只須要簡單地寫:
job1.then(job2).then(job3).catch(handleError); // job1 job2 job3 爲Promise對象。
// 一個簡單的實例 new Promise(resolve => { setTimeout(() => { resolve('hello') }, 2000) }).then(res => { console.log(res) })
參考:https://www.liaoxuefeng.com/wiki/1022910821149312/1023024413276544,https://www.jianshu.com/p/1b63a13c2701
七、springboot自動配置原理,若是加載配置文件
解答:涉及springboot原理。參考:https://jingyan.baidu.com/article/fdbd4277a277edb89e3f48fa.html
Spring Boot啓動的時候會經過@EnableAutoConfiguration註解找到META-INF/spring.factories配置文件中的全部自動配置類,並對其進行加載,而這些自動配置類都是以AutoConfiguration結尾來命名的,它實際上就是一個JavaConfig形式的Spring容器配置類,它能經過以Properties結尾命名的類中取得在全局配置文件中配置的屬性如:server.port,而XxxxProperties類是經過@ConfigurationProperties註解與全局配置文件中對應的屬性進行綁定的。
從啓動類的@SpringBootApplication進入,在裏面找到了@EnableAutoConfiguration:
八、nodejs讀取json文件的幾種方式
解答:我對nodejs 不熟,有知道的小夥伴可否留言解答下 (#`-_ゝ-)
1 var fs=require('fs') 2 fs.readFile('file.json','utf8',function (err, data) { 3 if(err) console.log(err); 4 var test1=JSON.parse(data); 5 });
九、ConcurrentHashMap與HashTable的區別,是怎麼實現線程安全的?
ConcurrentHashMap底層採用分段的數組+鏈表實現,線程安全。經過把整個Map分爲N個Segment,能夠提供相同的線程安全,可是效率提高N倍,默認提高16倍。(讀操做不加鎖,因爲HashEntry的value變量是 volatile的,也能保證讀取到最新的值。)Hashtable的synchronized是針對整張Hash表的,即每次鎖住整張表讓線程獨佔,ConcurrentHashMap容許多個修改操做併發進行,其關鍵在於使用了鎖分離技術。鎖分段技術:首先將數據分紅一段一段的存儲,而後給每一段數據配一把鎖,當一個線程佔用鎖訪問其中一個段數據的時候,其餘段的數據也能被其餘線程訪問。
HashTable底層數組+鏈表實現,不管key仍是value都不能爲null,線程安全,實現線程安全的方式是在修改數據時鎖住整個HashTable,效率低,ConcurrentHashMap作了相關優化初始size爲11,擴容:newsize = olesize*2+1.
十、mysql單表數據量很大,致使增刪改查都很慢,有什麼優化的意見?
方案一:優化現有數據庫:
1.數據庫設計和表建立時就要考慮性能;
2.sql的編寫須要注意優化;
4.分區;
5.分表;
6.分庫;
7.移除冗餘數據;
8.建立適合的索引:
方案二:升級數據庫類型,換一種100%兼容mysql的數據庫。
方案三:去掉mysql,換大數據引擎處理數據。
參考:http://www.javashuo.com/article/p-qukeiyez-bc.html
十一、考察sql編寫功底, 提供交易表,寫出去重、分組統計的語句。
解答:具體的字段名稱有點忘了,大致說一下解題思路:
一、去重,能夠用 distinct 或group by
二、 分組統計,不用多少了,使用group by ,對於統計不一樣類型的交易數量 可使用 sum(case when type =1 then 1 else 0 end)sum_type1
十二、mybatis操做數據庫的幾種方式?
這裏我對mybatis 不熟, 大致知道有種,一種基於全註解的方式,一種配置xml的方式。
=============================
在線筆試小結: 還有4道題記憶模糊了,考試時間爲2個小時,技術渣渣表示大半不會,,後面放棄掙扎,唱起一首涼涼。。╥﹏╥...
==============================
2、HR面試
=============================
HR面試小結:基本操做,沒有技術面的壓力,問一些基本狀況。
==============================
3、技術面試
技術面問的大都以簡歷項目、技術爲基礎,進行擴展。因此!想去龍騰面試的小夥伴必定要熟悉簡歷上的技術!作足準備!
一、ngnix應用的場景?
Nginx一是一款輕量級的、高性能的HTTP、反向代理服務器,具備很高的穩定性、支持熱部署、模塊擴展也很是容易。Nginx採起了分階段資源分配技術,處理靜態文件和無緩存的反向代理加速,實現了負載均衡和容錯,在這樣高併發的訪問狀況下,能經受起高併發的處理。能夠作web服務器、反向代理服務器、電子郵件服務器限制正經常使用戶的請求範圍(下載速度、訪問頻率)過濾非正經常使用戶的http請求。
參考:http://www.javashuo.com/article/p-kwcqipsv-ch.html
二、Oauth2.0協議流程
參考:https://jinnianshilongnian.iteye.com/blog/2038646
三、數據表數據原則?
3.1 數據庫三大範式
第一範式:列不可再分
第二範式:行能夠惟一區分,主鍵約束
第三範式:表的非主屬性不能依賴與其餘表的非主屬性 外鍵約束 且三大範式是一級一級依賴的,第二範式創建在第一範式上,第三範式創建第一第二範式上。
3.2 字段設計需合理,字段數量不超過20個,如有業務須要不少字段的,可考慮分表,用主鍵、外鍵進行關聯。
3.3 索引的建立。索引引並非越多越好,要根據查詢有針對性的建立,考慮在WHERE和ORDER BY命令上涉及的列創建索引,可根據EXPLAIN來查看是否用了索引仍是全表掃描;應儘可能避免在WHERE子句中對字段進行NULL值判斷,不然將致使引擎放棄使用索引而進行全表掃描。
3.4 儘可能用整型表示字符串,用0表示null;儘量使用not null定義字段
3.5 使用合理的字段屬性長度,固定長度的表會更快。使用enum、char而不是varchar。
四、讓你設計一個下拉框組件你會怎麼設計?
個人知識盲區。。 參考:http://blog.xuxiangbo.com/im-46.html
面試時我回答的幾個點: 須要考慮層級關係,要有個字段表示父類、子類的關聯;鼠標點擊事件。
五、tomcat調優?
參考:https://blog.csdn.net/ljj_9/article/details/79145324
5.一、爲提升安全性,關閉自動部署,防止被植入木馬惡意攻擊;
5.二、若是沒有使用Apache,禁用AJP。默認開啓狀態;
5.三、HTTP1.1 Connector參數設置,tomcat 8.5默認使用nio,請改成使用nio2;
5.四、沒有用到DNS時,禁用DNS;
5.5、設置GET請求的Encoding,Tomcat8.5缺省即爲UTF-8,如使用UTF-8則下面語句無需設置;如使用其餘Encoding,請參考下面語句來設置;
5.六、如需經過壓縮來減小網絡帶寬佔用,請採用反向代理+Tomcat的方式,壓縮交由反向代理,由於壓縮會增長Tomcat的負擔。
5.七、配置線程池、線程數;
5.八、jvm調優,例如如下:,更多請查看參考連接
Linux下修改TOMCAT_HOME/bin/catalina.sh JAVA_OPTS="-server -XX:PermSize=512M -XX:MaxPermSize=1024m -Xms2048m -Xmx2048m windows下修改TOMCAT_HOME/bin/catalina.bat set JAVA_OPTS=-server -XX:PermSize=512M -XX:MaxPermSize=1024m -Xms2048m -Xmx2048m
六、前端日後端傳遞數據的方式?好比提交表單數據?
form表單提交、ajax提交、經過url字符串拼接向後臺提交數據、經過a標籤提交數據,經過a標籤的href屬性提交數據,和js提交數據相似。
七、平時本身空閒時間有學習什麼知識?有去下載什麼開源項目?有沒有應用到項目裏?
自由發揮。
八、實現web站內信,使用到了rabbitmq,消息是怎麼展現在前端的進行提示?
rabbitmq 作爲消息緩存的中間件,生產者將消息發佈在mq裏,消費者進行消費,將站內信數據存在數據庫中,前端使用ajax 查詢未讀站內信息,數據庫表中有字段表示已讀或未讀,用戶點擊了未讀的站內信則將狀態設置爲已讀。
=============================
技術面試小結:技術面問的大都以簡歷項目、技術爲基礎,進行擴展。因此!想去龍騰面試的小夥伴必定要熟悉簡歷上的技術!作足準備!
面試結果:未經過。 緣由未諮詢,大致上也知道爲啥沒經過。。 我的技術層面還有很大的提高空間、不夠自信、技術面時緊張。
但願這篇博客能幫助到想進龍騰簡合工做的小夥伴~ 如有小夥伴看過了這篇博客,並順利面試進入龍騰簡合,記得來這留言說一聲呦~
==============================