某互聯網旅遊公司面試 補充更新中

基本流程

面試包括一小時筆試,三輪面試官面試,我面的是雲計算相關,對方基本業務是爲內部呼叫中心提供雲服務,說是有上萬個呼叫中心,用嵌入式盒子加顯示器做雲終端,連接到雲上,主要編程語言是python

跟新,現在已經入職,主要是做內部web發佈工具,需要的技術棧包括python,django,數據庫以及web開發常用技術

筆試

筆試包括選擇題,和三道編程題

選擇題

主要是一些數學題和邏輯題,數學底子比較好應該沒問題

三道編程題

數組中是否存在和爲s的兩個數

一個數組,判斷其中有沒有兩個數和爲s
先排序,兩個遊標分別指向首尾,可以先判斷最小的數是否大於s/2,變少判斷,複雜度爲O(n*log(n))

動態規劃 弱項

一個數組保存硬幣面值,求和爲S的最小硬幣數

第k大的數

m個已經排好序的數組,求這m個數組中第k大得數

一輪面試

比較基礎

二輪面試

比較基礎,問了些比較軟的東西,實習經歷相關,實習有什麼收穫之類的

三輪面試

壓力較大,面試官技術很厲害的樣子,問你看過哪些書,然後挑你不知道的問,有點挑刺,壓力面的味道

面試題目蒐集

python裏面元組和dict區別

線程和進程

同一進程的不同線程的異同
不同點:

  1. 標示符id
  2. 狀態及狀態轉換,需要提供一些操作
  3. 上下文環境:程序計數器等寄存器
  4. 自己的棧和棧指針

相同點:
共享所在進程的地址空間和其他資源

web服務器相關

你對jungle瞭解多少

爲什麼用tornado服務器?

聽同學講的,非阻塞異步io

core dump調試

參考一篇博客文章

core文件

core文件包含程序運行時的內存寄存器狀態堆棧指針內存管理信息還有各種函數調用堆棧信息等,可以理解爲程序工作當前狀態存儲生成的一個文件,通過分析工具分析這個文件,可以定位到程序異常退出的時候對應的堆棧調用的信息

如何判斷一個文件是否爲core文件

readelf -h core

查看type字段
或者:

file core

ulimit設置

ulimit -c [size]
size 含義
0 不產生core文件
n 產生core文件大小爲n個block,一個block大小爲512bytes
ulimit 大小不限

還有些路徑設置相關,需要的時候搜一下

core產生的原因

  • 內存訪問越界
  • 多線程程序使用了線程不安全函數
  • 多線程讀寫的數據沒有加鎖保護
  • 非法指針
    • 指針轉換,字節對齊的問題,比如32位機器int類型數據地址是4字節對齊,一個char類型數據地址1字節對齊即可,如果將一個非4字節對齊的char指針賦給int類型數據指針,會發生什麼呢?
  • 堆棧溢出
    • 局部定義一個特別大得數組這種,遞歸嵌套也可能爆棧

gdb調試core

gdb executivefile corefile

可以看到一些詳細的錯誤信息
注意一些常見的signal含義:

signal 含義
SIGABRT 調用abort函數時產生此信號。進程異常終止。
SIGBUS 指示一個實現定義的硬件故障。
SIGEMT 指示一個實現定義的硬件故障。EMT這一名字來自PDP-11的emulator trap 指令。
SIGFPE 此信號表示一個算術運算異常,例如除以0,浮點溢出等。
SIGILL 此信號指示進程已執行一條非法硬件指令。4.3BSD由abort函數產生此信號。SIGABRT現在被用於此。
SIGIOT 這指示一個實現定義的硬件故障。IOT這個名字來自於PDP-11對於輸入/輸出TRAP(input/outputTRAP)指令的縮寫。系統V的早期版本,由abort函數產生此信號。SIGABRT現在被用於此。
SIGQUIT 當用戶在終端上按退出鍵(一般採用Ctrl-/)時,產生此信號,並送至前臺進程組中的所有進程。此信號不僅終止前臺進程組(如SIGINT所做的那樣),同時產生一個core文件。
SIGSEGV 指示進程進行了一次無效的存儲訪問。名字SEGV表示“段違例(segmentationviolation)”。
SIGSYS 指示一個無效的系統調用。由於某種未知原因,進程執行了一條系統調用指令,但其指示系統調用類型的參數卻是無效的。
SIGTRAP 指示一個實現定義的硬件故障。此信號名來自於PDP-11的TRAP指令。SIGXCPUSVR4和4.3+BSD支持資源限制的概念。如果進程超過了其軟C P U時間限制,則產生此信號。
SIGXFSZ 如果進程超過了其軟文件長度限制,則SVR4和4.3+BSD產生此信號。

數據庫

事務,database transaction:單個邏輯工作單元執行的一系列操作,要麼完全執行,要麼完全不執行
事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向數據的資源。通過將一組相關操作組合爲一個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程序更加可靠。

ACID屬性:

  • atomic原子性:事務必須是原子工作單元,對於數據修改,要麼全部執行,要麼不執行
  • consistent一致性:事務完成時,必須使所有的數據保持一致狀態,
  • insulation隔離性:併發事務所作的修改必須與任何其它併發事務所作的修改隔離,事務查看數據時數據所處的狀態,要麼是另一併發事務修改它之前的狀態,要麼是另一事務修改它之後的狀態,事務不會查看中間狀態的數據。
  • duration持久性:事務完成之後,它對於系統的影響是永久性的。

linux使用

查看某個運行的進程

參考
- ps -aux | grep program
- top

git使用

版本機常規操作,難一點的是分支的管理

linux命令返回值

在Linux中不管是啓動桌面程序還是在控制檯執行命令都會有一個返回值,可以叫做錯誤號(perror),在linux中執行命令後可通過命令:echo $?來查看上一條命令的返回值。要查看返回值的具體含義,可通過perror number查看

多線程多進程相關 弱項

多進程,多線程,單線程服務器的區別和應用場景

線程,進程的區別等

進程之間的任務隊列

發佈了45 篇原創文章 · 獲贊 2 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章