記錄面試龍騰簡合-java開發工程師經歷

/** * ############ * 變強是會掉光頭髮的!如今的頭髮仍是很茂盛,是該開心仍是難過呢。。 * ############ * /

    總結下近期面試龍騰簡合-java開發崗的經歷。附上筆試、技術面試題以及相應的題解。有些題目記憶有點模糊了,這裏就大概描述下。html

我先作我的說明, 學歷非雙福州普通二本計算機專業,畢業兩年多,近期因我的緣由想換工做,體驗下其餘IT公司的氛圍。前端

廢話少說,開始進入正題。vue

整個過程分三個步驟:java

 ============================= node

  • 在線筆試
  • HR面試 -- 龍騰HR小姐姐很nice,HR面溝通的很愉快
  • 技術面試  -- 感受是一個技術大佬面,感到緊張。╮(╯▽╰)╭

 ============================= 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

     這裏我說一次個人對這道題的理解:

  • 首先,36輛車分6組,進行比賽,每組取前3名,淘汰6x3=18輛

     

  •  每組第1名進行一輪比賽,選出前3名的組,並淘汰後3名的組,一共淘汰3x3=9輛。 這裏假設A\B\C這三組的車爲前三名:

      

    到這一步能夠肯定第一名是哪一車,這裏假定第一名爲車A1, 接下來要肯定哪輛車是第二名和第三名。這裏只要簡單分析下,就能淘汰掉車C二、車C3和車B2。

    淘汰車C2和C3的理由:車A1 > 車B2>車C3>車C2>車C3;

     淘汰車B2的理由:車A1>車B1>車B2>車B3

     

  •    由於已經肯定A1爲最快的車,因此只須要將車A2\A3\B1\B2\C1 進行一輪比賽就能肯定第二名和第三名了。

       所以,須要 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/1023024413276544https://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.建立適合的索引:

  • 索引並非越多越好,要根據查詢有針對性的建立,考慮在WHERE和ORDER BY命令上涉及的列創建索引,可根據EXPLAIN來查看是否用了索引仍是全表掃描;
  • 應儘可能避免在WHERE子句中對字段進行NULL值判斷,不然將致使引擎放棄使用索引而進行全表掃描;
  • 值分佈很稀少的字段不適合建索引,例如"性別"這種只有兩三個值的字段;
  • 字符字段只建前綴索引;
  • 字符字段最好不要作主鍵;
  • 不用外鍵,由程序保證約束;
  • 儘可能不用UNIQUE,由程序保證約束;
  • 使用多列索引時主意順序和查詢條件保持一致,同時刪除沒必要要的單列索引

           方案二:升級數據庫類型,換一種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請求的EncodingTomcat8.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 查詢未讀站內信息,數據庫表中有字段表示已讀或未讀,用戶點擊了未讀的站內信則將狀態設置爲已讀。

 

 =============================

   技術面試小結:技術面問的大都以簡歷項目、技術爲基礎,進行擴展。因此!想去龍騰面試的小夥伴必定要熟悉簡歷上的技術!作足準備!

 面試結果:未經過。 緣由未諮詢,大致上也知道爲啥沒經過。。 我的技術層面還有很大的提高空間、不夠自信、技術面時緊張。

 但願這篇博客能幫助到想進龍騰簡合工做的小夥伴~ 如有小夥伴看過了這篇博客,並順利面試進入龍騰簡合,記得來這留言說一聲呦~

 ==============================

相關文章
相關標籤/搜索