總結面試當中遇到的問題

總結一下這幾天面試遇到的問題前端

面試環節,大同小異java

第一輪:電話面試 作簡單的篩選 時間15-30分鐘,主要是瞭解一下你會哪些?問題會問你以前作過的項目,目的在於瞭解你是否熟悉掌握測試流程和測試思路,這塊描述流程的時候,能夠把本身會的一些工具加上去。測試流程大體爲需求評審--寫測試計劃與方案-畫流程圖--冒煙測試-測試用例編寫--執行功能測試--ui測試--性能測試--安全測試等等;整個流程涉及到的技術和工具,夾雜在流程思路里去分析解說,能夠加分;好比用什麼工具管理用例,用什麼工具畫流程圖,bug管理工具,文件配置工具,性能工具會哪些,接口工具備哪些?等等..第一輪面試通常還會問在職仍是離職?以前離職的緣由?目前住哪裏?工做地點有什麼要求?薪資範圍是多少?以上這些附加的軟情商類問題,還會問一些技術技能,好比會不會自動化?會不會接口?會不會腳本?掌握程度怎麼樣?會不會linux?會不會數據庫?初面不會深問mysql

 

 

第二輪:通常是公司的測試負責人面試,時間大概是60-90分鐘,這裏通常會聊得很是細。由於技術是一個很是廣闊的領域,其實這塊的話能夠引導面試官,爭取在本身擅長的領域去發揮,讓面試官跟着你的思路走;常問的問題總結以下:linux

1、數據庫

通常問的比較少,針對初級的可能會問細節,這塊讓面試官不追問細節的好辦法就是主動的羅列總結一些數據庫的知識,好比數據庫無非就是分爲插入,查詢和更新,如下是我面試遇到過的問題ios

建表:Create table students(nginx

           Id int(10) primary key not null unique auto_increment,c++

           Name varchar(20) not null,web

           Sex varchar(4),面試

           Class varchar(20) not null正則表達式

            );

           Default charset = utf8;

 

建庫:Create database xsk default character set utf8;

刪表:Use xsk;

           drop table students;

           Truncate table students;

           Delete from students where name=’mike’

drop刪除數據庫或表

Delete 刪除表裏的內容

truncate刪除速度快,不可恢復,delete一行一行刪除,能夠回滾

 

Update students set name=’小明’ where id =1;

修改字段類型和註釋:

Alter table sys_application modify column app_name varchar(20) comment ‘應用的名稱’

 

Insert into students(sid,sname,age) values(1,’小明’,20);

 

Select * from students;

select xxx,xxx,聚合函數()

from a a,b b

where a.id=b.id and 條件

group by 字段

having in (篩選)

Order by desc/asc

limit x //取多少行

聚合函數:sum max avg count

 

左鏈接:左表有多少條數據,就顯示多少條數據

右鏈接:右表有多少條數據,就顯示多少條數據

外連接:顯示左表和右表全部的數據

內鏈接:顯示兩張表都有的數據

笛卡爾積:簡單的說就是兩個集合相乘,兩個表中去除 重複的數據(例如關聯的列)

Select * from students st left join score s on st.id=s.stu_id;

Select * from students st right join score s on st.id=s.stu_id;

Select * from students st inner join score s on st.id=s.stu_id;

Select * from students st,score s where st.id=s.stu_id;

 

 

2、Linux

查看進程,建立目錄,建立文件,賦予權限,解壓,查看進程  查看端口號  修改文件   解壓包 打印日誌

1)字符串處理

哪一個字符串出現的次數最多,是多少?Shell腳本

將文件夾中的aaa改成bbb,寫個shell?

 

2)包解壓命令 

壓縮tar -zxvf /tmp/zheng.tar.gz

打包tar -zcvf /tmp/zheng.tar.gz /home/zheng

 

3)vi模式下,批量把aaa替成bbb

:1,’s/aaa/bbb/g’   從第1行開始替換

# sed -i ‘s/aaa/bbb/g’ wenjianming

# sed -i ‘s/http:\/\/www.besttest.cn\//http:\/\/127.0.0.1:8000\/g’ 1txt

定時任務

Crontab -e

5 0 * * *

Crontab -u root -l

 

3、怎麼部署環境

我說的比較簡單

1.安裝好項目

安裝jdk,再安裝Tomcat,再把項目部署到webapps文件夾下,靜態HTML的訪問配置,進入tomcat的bin目錄 執行./startup.sh重啓tomcat,再到前臺頁面去啓動該項目,網頁輸入網址:格式:ip:端口號/項目,如:http://192.168.199.134:8082/diaowen/

2.配置連接數據庫 安裝MySQL 命令:yum -y install mysql,配置application.properties文件目錄:如/usr/local/tomcat7.2/webapps/diaowen/WEB_INF/classes/conf/application.properties

設置好端口號,數據庫名和密碼,方便訪問連接,想要深刻加分可自行百度;

 

4、畫個架構

1.nginx將請求轉發到服務端,服務端直接去zk上去取kafka,而後進行鏈接

//kafka到zk上去註冊,直接鏈接到zk,zk和kafka之間相互交互,服務端不會直接跟kafka直接交互

2.服務器直接去鏈接文件服務器集羣,直接去取直接去返回 server<--->文件服務器

3.服務器直接去鏈接mysql集羣

//也有的公司,MySQL去zk上註冊,應用服務直接去zk裏面取到生效的mysql,而後去MySQL集羣裏面取mysql(至關於zk在管理MySQL的集羣)

4.服務器直接去鏈接redis 直接去取,直接去返回 server<--->redis

//也有的公司,redis去zk上註冊,應用服務直接去zk裏面取到生效的緩存,而後去redis集羣裏面取信息(至關於zk在管理redis的集羣)

5.cdn:不屬於服務的架構以內,有的公司會去租用阿里雲等的cdn,主要用於 前端 的訪問策略,是在本身的服務以外的

 

5、性能問題怎麼去定位

1.性能發現什麼問題?怎麼去分析的?

響應時間慢,tps小,CPU使用高,內存溢出等問題

 

服務器響應時間慢,tps小的分析思路:

1).瞭解系統架構,並畫出系統架構圖

2).根據系統架構圖,畫出被測接口請求的數據流經圖,並列出可能存在問題的每一個點,尋找一些快速定位的方法

3).根據經驗主義進行對問題進行排查

a:要麼從簡單的開始排查(負載機-網絡-硬件)-(容器鏈接池、db鏈接池)-sql執行效率-gc(垃圾回收)-code(代碼)

 

負載機:(1)單機max 50個併發,tps=500;單機併發>50的時候,tps<500。

50併發tps是500,大於50併發tps卻降低了,請問緣由在哪裏:CPU問題:進程越大,上下文切換越大,非lr時間變大,那麼工做時間減小,發送的請求數量變少

2)50個併發,單機tps=500,三機tps=800。

說明是負載機的性能瓶頸問題,三機tps並非1500,說明服務器cpu性能問題

Linux性能監控命令:top、vmstat、iostat、sar等命令進行監控

 

網絡:(各個服務器之間的網路鏈接)netstat -i看網絡有沒有丟包,延遲高不高

 

硬件:cpu,應用程序、數據庫(cpu 、內存、磁盤):top一下

 

Web容器鏈接池:線程是否被佔滿,有沒有排隊?在tomcat/conf/tomcat-users.xml下配置status,瀏覽器ip:端口號/manager/status,輸入用戶名tomcat ,密碼:123456,便可查看tomcat的線程配置和使用狀況。Tomcat的配置文件:tomcat/conf/server.xml

 

數據庫鏈接池:線程是否被佔滿,有沒有排隊?

show variables like '%max_connections%';查看當前最大鏈接數

show global status like 'Max_used_connections';服務器響應的最大鏈接數

新設置數據庫最大鏈接數set global max_connections=1000

 

Sql執行效率:開啓慢查詢日誌,可讓MySQL記錄下查詢超過指定時間的語句,經過定位分析性能的瓶頸,才能更好的優化數據庫系統的性能。顧名思義,慢查詢日誌中記錄的是執行時間較長的query,也就是咱們常說的slowquery,經過設–log-slow-queries[=file_name]來打開該功能並設置記錄位置和文件名。

Spotlight on MySQL監控MySQL服務器

              優化:減小IO次數、下降cpu計算、查詢選取最適用的字段類型避免查詢浪費、減小排序,爲常常須要排序、分組和聯合查詢操做的字段創建索引、禁用外鍵、避免大sql、避免大批量更新、避免取過量數據,靈活使用limit、避免在SQL 語句中進行數學運算、函數計算、邏輯判斷等操做如=、+,、避免OR、避免select * from t ;

 

Gc垃圾回收(JVM):oom內存是否溢出、GC時間很長

ps -ef|grep java

jstat -gcutil java的進程號

看下有沒有fgc,沒有的話說明不是GC致使的

jstat -gcutil pid 查看gc狀況,jmap -histo  PID 查看哪一個方法致使內存溢出

jmap -dump:live,format=b,file=heap.bin 2143而後用jhat或者MAT分析看堆

jstack 2143(線程id) 查看棧的使用狀況

 

 

Code代碼:不會代碼,通常不說代碼這塊,會的能夠本身百度下

           壓測的時候CPU高(用戶cpu高)

1.top一下 ,而後shift+p(按CPU消耗排序),查看是哪一個進程致使的CPU使用高,查看它的PID

2.top -H 21380 查看進程對應的什麼線程致使CPU使用高

查看是哪些線程佔用的cpu高 PID爲21383和21384  對應線程佔用CPU高

查看jstack裏面的tid是16進制的,21383是10進制的,須要把十進制的換算成16進制的

printf "%x" 21383  轉換出來了之後是5388和5387

而後去看這個線程id在執行什麼方法

3.jstack 21380 >2.txt

vim 2.txt

在裏面直接搜索:5388(nid的值)

分此線程在幹什麼(GC致使了CPU使用高)

實際工做中,查看致使CPU使用太高的線程棧在執行什麼方法

jstat -gcutil -21380 500 3 //再看看

 

 

b.要麼經過系統日誌打印出接口以及sql(或者web容器排隊)時間,而後根據時間去判斷可能存在的問題的點,縮小問題的範圍

 

CPU使用率高的分析思路:

Top--top -H PID--printf 「%x」 21383---jstack 21380|grep 5388 查看方法在幹嗎

Sportlight監控

第一種狀況,某個線程一直CPU利用率100%,則說明是這個線程有可能有死循環,那麼請記住這個PID。

第二種狀況,某個線程一直在TOP十的位置,這說明這個線程可能有性能問題。

第三種狀況,CPU利用率TOP幾的線程在不停變化,說明並非由某一個線程致使CPU偏高。

 

內存溢出分析思路:jprofiler

gc:jstat -gcutil pid 查看gc狀況,jmap -histo  PID 查看哪一個方法致使內存溢出

jmap -dump:live,format=b,file=heap.bin 2143而後用jhat或者MAT分析  看堆

jstack 2143(線程id) 查看棧的使用狀況

 

 

502 充當網關或代理的服務器,從遠端服務器接收到了一個無效的請求

503 因爲超載或系統維護,服務器暫時的沒法處理客戶端的請求。延時的長度可包含在服務器的Retry-After頭信息中

 

6、接口測試怎麼測?

思路+工具使用

思路

1.基本功能測試(業務邏輯實現)

2.邊界值分析

3.參數組合

4.異常處理:

4.1某個接口須要先登陸獲取 sesssion,若是直接調用該接口應該給出相應提示

4.2重複提交(付款),程序怎麼處理的

4.3一個業務流程包含多個操做步驟,若是某個操做失敗,那麼整個操做須要回滾。或者調用前一個步驟的逆向接口進行操做取消

4.4關聯繫統出現宕機、超時或者無響應的狀態時,接口返回提示正確,業務邏輯正確,不可存在事務性不一致的狀況

4.5 數據庫裏數據量較大時(百萬級),測試對DB進行增刪改查操做的效率。

接口傳入數據與插入DB的數據一致性:前端某個操做涉及後臺DB多張表時。每張表面都要檢驗數據正確性。

性能層面:

5.1 接口響應時間

5.2 吞吐量

5.3 併發數

5.4 服務器資源使用率(cpu、內存、磁盤、網絡)

6 安全測試:敏感信息是否加密(前端、日誌)、sql注入

 

工具使用:舉例:用jmeter作的接口測試,主要是新建測試計劃,測試計劃下添加線程組,再添加sample,錄入get的url,查看返回的響應狀態碼和數據、結果;若是判斷是否get成功,能夠增長響應斷言,用正則表達式去提取,好比登陸百度,用正則表達式取百度,有百度則成功;用post方法,錄入url和傳入參數,看響應狀態碼和返回結果值是否正確;添加查看結果樹和分析圖監控測試結果;經過CVS去準備參數,正則表達式關聯等等

 

 

7、自動化怎麼測?

1.jmeter和lr各自優缺點

1)lr是c語言寫的(c是多進程的),jmter是純java語音(java是單進程的)。//lr是多進程的,jmter是單進程的,lr處理能力比jmeter快,數據更準確

2)Loadrunner優勢:功能強大、簡單、上手容易,支持協議種類多(http、https、websocket、)

缺點:商業,收費,破解稍微麻煩

3)jmeter 優勢,開源、免費、小巧   缺點:上手比較難

//lr比jmeter好,可是測出的tps沒有jmeter高的緣由:(緣由:jmeter啓用長鏈接的緣由,lr沒有長連接)

 

8、HTTP協議瞭解嗎?

http是不加密的傳輸協議,狀態碼有1xx:信息;200:請求成功,最多見;3xx:重定向;4xx:客戶端問題;5xx:服務器問題;https加密協議;若是本身知道幾個具體的能夠解釋一下,能夠加分;好比以前一個放在tomcat下的webapps的項目文件名與網址輸入的路徑名不一致,致使文件目錄找不到,報404錯誤

 

 

9、具體項目的測試

1)支付寶轉帳怎麼測試?

     

2)微信聊天怎麼測試?

      

3)接單  方圓5千米 接單怎麼設計?

1)接口:業務邏輯、邊界值、參數組合、異常狀況(重複提交、登陸session、關聯繫統無響應)

2)功能:根據需求文檔,考慮正確的業務邏輯實現,正常的異常的,等價類、邊界值等

3)集成:業務邏輯正常實現,調用其餘服務,其中一個服務宕了,怎麼處理

4)兼容性:不一樣手機

5)安全:敏感信息是否加密(前端、日誌)

6)Ui:友好、易用

7)性能:響應時間、併發數、服務器資源使用率(cpu、內存、磁盤、網絡)

8)健壯性:對異常處理,沒有信號、電話打斷。。

 4)設計提現、添加銀行卡的測試點

 

 

10、語言算法類

1)冒泡排序 阿里面試喜歡問

2)請實現一個函數,將一個字符串中的空格替換成「%20」。例如,當字符串爲We Are Happy.則通過替換以後的字符串爲We%20Are%20Happy(實現語言不限)

3)任意給定一個32位無符號整數n,求n的二進制表示中1的個數,好比n = 5(0101)時,返回2,n = 15(1111)時,返回4(實現語言不限)

4)請用java vuser或c++實現一個socket請求發送一個消息「text msg」到127.0.0.1:80端口

以上自行百度,阿里的筆試面試題,我是卡在這裏了

(5)任何語言寫出給你一組數,從中找出最大或最小的數

6)從1000個裏面隨機抽出10我的進行處理。

 

11、性能測試流程,完整(一套流程到出報告)

1.性能測試需求分析:

1)確認性能測試場景: 好比一個銀行用戶登陸流程

2)性能測試指標:100併發 響應實際3秒之內

3)確認系統架構:nginx、tomcat(server)、mysql、redis、zk+kafka

2.性能能測試計劃:

評估工做量、壓測排期、測試人員

3.性能測試準備:

1)環境準備

a.硬件環境:硬件標準CPU顆粒數,內存大小要一致

b.軟件準備:版本必需要與線上一致,如Tomcat、jdk等

2)數據準備

  a.數據庫表準備: order表、pay表、point表、buyer表  

b.腳本準備:order腳本、user腳本 c.參數化數據準備10萬買家用戶、10萬賣家用戶

4.性能測試執行

  a.監控(對測試工具的監控,對linux系統的資源使用狀況的監控top)

b.定位瓶頸(CPU使用太高、tps小,響應時間慢,內存溢出)

c.調優

d.迴歸(跟上一次的數據進行對比)

e.報告(測試環境、測試用例、測試調優,最終達到客戶性能要求)

 

------------------------------------------------------------------------------------------------

請描述一下性能測試的流程

性能需求分析(肯定性能場景,性能指標、系統架構)

性能計劃(人員、時間、工做量、困難等)

測試準備(環境準備【硬件環境:cpu、內存一致;軟件環境:tomcat、jdk版本一致】、腳本準備、測試數據準備、參數化文件準備)

測試(監控、定位、分析、調優、回測、測試報告)

 

如何分析和獲取性能測試需求和性能測試指標

性能需求

28原則:測試20的主業務

根據業內的標準:358原則

 

性能壓測過程當中通常會關注那些性能指標

響應時間、TPS、併發數、 系統資源使用狀況(cpu、內存、磁盤、網絡)

 

性能測試腳本須要通過那些優化

根據不一樣的協議進行腳本開發(HTTP、https、jdbc、webservice、socket)

保證腳本的乾淨性:錄製或者本身抓包直接寫 A.錄製精簡腳本,刪除cookie,刪除其餘不相關的服務的請求,刪思考時間

B.直接改請求的代碼:"Mode=HTML"改成"Mode=HTTP"

//HTML會發送上下游的跳轉以及頁面的靜態請求等,HTTP僅僅發一個請求

作測試的時候,一個action裏面只放一個請求,一個事物裏面只放一個請求,將依賴條件(登陸)放到init裏面,將關聯的請求放事物外面

2)參數化:根據業務選擇參數化策略,登陸互踢,註冊數據庫對數據有惟一性校驗

3)關聯:服務器每次返回動態的值,下一次請求須要使用

4)事物:沒有事物就沒有tps

5)檢查點:判斷業務是否成功,數據庫查詢須要加,其餘的直接查看數據庫裏的數據(web_reg_find)

6)集合點:加大某個請求的瞬時併發的機率(秒殺,搶購才須要加集合點)insert--> rendezvous-->填寫集合點名稱

7)思考時間:run time setting -->thingk time  迭代次數、Pacing:迭代時間、log

 

a.單場景測試--接口性能 b.混合場景測試--接口直接、程序直接、數據庫直接的死鎖(單混:10-15分鐘) c.穩定性場景測試---內存泄漏和gc(n*12小時))

------------------------------------------------------------------------------------------------

請寫出經常使用的監控服務器資源和性能分析的命令

top  top -H PID   uptime  

Iostat -x  netstat -i

 jstat  -gcutil PID   jmap -histo PID  jmap -dump   jstack PID

ps -ef|grep java/nginx/httpd/tomcat

netstat -lanp|grep 80

------------------------------------------------------------------------------------------------

 

12、請描述JVM的工做原理

堆(對象)存儲,棧(方法)運行,堆內存分代收集

性能分析,先看堆:內存不夠、內存溢出、GC、程序報heap out of memory

只要是堆的問題:就是減小對象到老年代的頻率a.調全年輕帶跟老年人的比例b.更換回收器  

定位GC: jmap -histo PID

jmap -dump 而後用AMT或jhat進行分析

減小fullGC頻率的辦法:1)調大jvm的值2)調整垃圾回收器

 

2)而後看棧:用戶cpu使用高,系統慢,無響應,I/O太高,線程死鎖,都去看棧、jstack PID去分析線程棧,看是什麼方法致使了這個現象

 

1)堆:數據存儲單位。new的對象,數組是實例化

2)棧:java運行程序時的單位。怎麼去調度,調用什麼方法,傳遞什麼參數,方法、程序計數器、全局變量,常量 邏輯判斷。

3)棧要操做一些對象和一些數據,這個數據存放在堆裏

 

若是我短期去跑性能沒有問題,可是長時間跑忽然又有問題了是什麼緣由呢?

能夠從jvm內存去分析

 

 

其餘(與上有雷同)

請列舉你遇到過的性能瓶頸(前端頁面、操做系統、網絡、容器、DB、中間件、業務代碼等方面)

Msql 或oracle 如何發現、分析、定位數據庫耗時比較長的sql,並簡述優化sql的原理或過程

請詳細描述你所參與項目的測試流程,注:內容涵蓋測試環境搭建、及上線流程。

簡述你所認爲的優秀的測試人員都具有什麼樣的素質?

linux環境下如何查看當前8080端口是否被佔用?若是佔用如何中止該進程?

Netstat -lanp|grep 「8080」

Kill -9 PID

數據庫中目前存在money表,該表存在uid字段,如何經過uid對money表進行降序查詢?降序查詢後若只想查看其中的50條記錄時如何查看?

Selecet * from money

Ordy by uid  desc limit 50

請簡述性能調優都有哪些方法?

 

Tomcat

1)Tomcat啓動、中止

sh /usr/local/tomcat3/bin/startup.sh

sh /usr/local/tomcat3/bin/shutdown.sh

2)Tomcat訪問 //ip端口號

http://192.168.10.233:8080/

3)#vim /usr/local/tomcat3/conf/tomcat-users.xml

加入:

<role rolename="manager-gui"/>

<user username="tomcat" password="123456" roles="manager-gui"/>

訪問tomcat地址,http://ip:端口號/manager/status,輸入用戶名、密碼,輸入用戶名:tomcat ,密碼:123456

4)Tomcat配置監控文件

vim /usr/local/tomcat3/conf/server.xml

Apache

1)啓動:service httpd start

2)查看Apache的版本和當前運行模式    [root@besttest etc]# httpd -V

3)vim/etc/httpd/conf/httpd.conf

這裏能夠看到咱們的apache版本是2.2.15,工做模式爲Prefork

Apache的早期版本2.0默認prefork,2.2版本是worker,2.4版本是event

Apache 的配置文件 httpd.conf 裏添加一段 Location /server-status

多進程單線程改成---多進程多線程  event

4)訪問http://ip地址/server-status,即可以看到監控頁面

 

4.你對tcp和udp協議的區別有什麼理解

一、TCP面向鏈接(如打電話要先撥號創建鏈接);UDP是無鏈接的,即發送數據以前不須要創建鏈接

二、TCP提供可靠的服務。也就是說,經過TCP鏈接傳送的數據,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付

Tcp經過校驗和,重傳控制,序號標識,滑動窗口、確認應答實現可靠傳輸。如丟包時的重發控制,還能夠對次序亂掉的分包進行順序控制。

三、UDP具備較好的實時性,工做效率比TCP高,適用於對高速傳輸和實時性有較高的通訊或廣播通訊。

4.每一條TCP鏈接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通訊

五、TCP對系統資源要求較多,UDP對系統資源要求較少。

 

第三輪:通常是公司的CTO面試或者經理面試,時間在20-30分鐘左右,技術和上面差很少,可是會多一些軟情商的問題

問題總結以下:

  1. 你執行case的測試策略是什麼?在項目時間很充裕的狀況下你怎麼調整測試策略,在時間很緊的狀況下怎麼調整你的測試執行策略?
  2. 若是公司內部出現一些不愉快的事情你怎麼去協調?好比說開發就說這不是一個bug,不肯意修改?或者開發作的東西質量不好,你怎麼去協調?
  3. 將來職業發展規劃是什麼?建議不要說管理崗
  4. 你對科技這塊的東西是否感興趣,談談你對將來科技趨勢的理解?什麼物聯網,大數據,人工智能
  5. 你對將來團隊的氛圍有什麼指望嗎?
  6. 你有什麼缺點?
  7. 你在項目中遇到的困難與挑戰是什麼?
  8. 建議不要說本身轉行(面大廠說本身轉行是很減分的,我試過)

 第四輪:HR談薪資和入職行政事宜,此處省略;

相關文章
相關標籤/搜索