P2P項(xiàng)目專(zhuān)題
● 具體的你在P2P項(xiàng)目中都干什么了,你負(fù)責(zé)哪一塊,每一塊實(shí)現(xiàn)的時(shí)候用到了哪些技術(shù)?
● 你們項(xiàng)目的并發(fā)量設(shè)計(jì)了多少?
● P2P項(xiàng)目上線了嗎?
● 你項(xiàng)目中的事務(wù)是怎么處理的?
● 在秒殺項(xiàng)目中使用消息隊(duì)列ActiveMQ進(jìn)行流量削峰,如果ActiveMQ接收消息失敗了,怎么辦?
消息在接收后會(huì)被服務(wù)器刪除,為了避免接收消息失敗而消息又被服務(wù)器刪除,此時(shí)我們可以關(guān)閉自動(dòng)確認(rèn)機(jī)制AUTO_ACKNOWLEDGE,采用手動(dòng)消息確認(rèn)機(jī)制,由程序進(jìn)行消息的確認(rèn),接收消息發(fā)生異常,則不確認(rèn)消息,以便于下次可以再次接收。
● 在秒殺項(xiàng)目中使用消息隊(duì)列ActiveMQ進(jìn)行流量削峰,如果ActiveMQ掛掉怎么辦?
第一點(diǎn),首先消息需要使用持久化消息,服務(wù)掛掉,重啟服務(wù)后消息依然可以消費(fèi),不會(huì)丟失;
第二點(diǎn),ActiveMQ采用主從模式搭建集群,比如搭建3臺(tái)主從模式的ActiveMQ集群,提高服務(wù)的可用性;
● 在交易中,如何控制超賣(mài)問(wèn)題(賣(mài)出去的商品大于數(shù)據(jù)庫(kù)實(shí)際商品庫(kù)存)?
解決超賣(mài)問(wèn)題,一個(gè)是借助于鎖機(jī)制實(shí)現(xiàn),這里面有線程鎖、數(shù)據(jù)庫(kù)鎖、分布式鎖等,另一個(gè)是借助于某些中間件產(chǎn)品實(shí)現(xiàn),比如Redis;
如果我們的服務(wù)只是部署了一臺(tái)服務(wù)器,我們通過(guò)線程鎖即可控制并發(fā)問(wèn)題,控制了并發(fā)問(wèn)題,也就不會(huì)產(chǎn)生減庫(kù)存的沖突,即不會(huì)產(chǎn)生超賣(mài)問(wèn)題,這種實(shí)現(xiàn),效率不高,而且只能是單機(jī)部署,實(shí)際項(xiàng)目不會(huì)采用;
如果我們的服務(wù)是集群部署,線程鎖就不行了,此時(shí)可以使用數(shù)據(jù)庫(kù)鎖或分布式鎖控制并發(fā)問(wèn)題,從而控制減庫(kù)存的沖突,避免超賣(mài)問(wèn)題,數(shù)據(jù)庫(kù)鎖可以采用樂(lè)觀鎖、悲觀鎖,其中樂(lè)觀鎖比悲觀鎖效率稍高,在實(shí)際項(xiàng)目中使用多一些,悲觀鎖使用較少,但由于數(shù)據(jù)庫(kù)本身的性能和并發(fā)處理能力并不理想,在高并發(fā)項(xiàng)目中,使用數(shù)據(jù)庫(kù)鎖也是不合適的;
使用分布式鎖解決超賣(mài)問(wèn)題,在實(shí)際項(xiàng)目中有相關(guān)真實(shí)的案例,主要采用zookeeper實(shí)現(xiàn)分布式鎖,分布式鎖是將我們的線程鎖擴(kuò)展為多個(gè)jvm的鎖,代碼在多個(gè)jvm上執(zhí)行時(shí),分布式鎖也能進(jìn)行鎖定,因?yàn)槟苕i定就能控制并發(fā),控制了并發(fā)即能控制減庫(kù)存的沖突,即可解決超賣(mài)問(wèn)題;
使用一些中間件產(chǎn)品解決超賣(mài)問(wèn)題被經(jīng)常使用,最被常用的是Redis,在實(shí)際項(xiàng)目中被大量使用,由于Redis是單線程的,不管有多少個(gè)并發(fā)請(qǐng)求,Redis會(huì)將請(qǐng)求排隊(duì)進(jìn)行處理,即一個(gè)一個(gè)地有先后順序地處理,這樣即不會(huì)有并發(fā)問(wèn)題,即不會(huì)產(chǎn)生減庫(kù)存的沖突,從而解決減庫(kù)存的超賣(mài)問(wèn)題;
● 在實(shí)際項(xiàng)目中,是否使用過(guò)多線程?
在P2P項(xiàng)目中,比如在用戶投資到期后需要給用戶回款,此處我們使用了多線程,加快整個(gè)回款的速度,我們先從數(shù)據(jù)庫(kù)獲取所有待回款的數(shù)據(jù),然后創(chuàng)建一個(gè)線程池,每個(gè)回款是一個(gè)線程,將這些回款線程提交到線程池中執(zhí)行,從而充分利用服務(wù)器的CPU資源快速為用戶回款;
再比如當(dāng)每個(gè)投資用戶生日時(shí),我們會(huì)在用戶生日當(dāng)天給用戶送一個(gè)生日紅包,由于同一天有大量用戶生日,我們也是通過(guò)多線程為用戶送紅包,先從數(shù)據(jù)庫(kù)獲取當(dāng)天生日的用戶,然后創(chuàng)建一個(gè)線程池,給每個(gè)用戶發(fā)紅包是一個(gè)線程,將這些發(fā)紅包線程提交到線程池中執(zhí)行,從而加速生日紅包的發(fā)送任務(wù);
● P2P中的投資及收益金額采用Java中的什么數(shù)據(jù)類(lèi)型進(jìn)行存儲(chǔ)?
由于涉及到精度問(wèn)題,我們項(xiàng)目中都采用BigDecimal類(lèi)型,以避免在計(jì)算收益時(shí),導(dǎo)致金額精確的損失。
● 你們這個(gè)P2P項(xiàng)目上線后采用的是什么訪問(wèn)協(xié)議?
為了數(shù)據(jù)傳輸?shù)陌踩裕覀兊膒2p項(xiàng)目訪問(wèn)的時(shí)候,全部都https協(xié)議,https協(xié)議會(huì)將數(shù)據(jù)加密傳輸,提高安全性,我們當(dāng)時(shí)公司的運(yùn)維部門(mén)采購(gòu)了https的安全證書(shū),在服務(wù)器上搭建了https協(xié)議的訪問(wèn)方式,如果用戶采用http訪問(wèn),我們會(huì)自動(dòng)跳轉(zhuǎn)到https協(xié)議打開(kāi)網(wǎng)頁(yè);
● 你們P2P項(xiàng)目對(duì)金錢(qián)是怎么處理的?
項(xiàng)目中涉及到的資金問(wèn)題,有幾處處理,一個(gè)是我們有一個(gè)后臺(tái)對(duì)賬系統(tǒng),每天會(huì)根據(jù)第三方支付系統(tǒng)的結(jié)算清單,與我們這邊的充值數(shù)據(jù)進(jìn)行對(duì)賬,保證我們與第三方的數(shù)據(jù)一致;
對(duì)于用戶投資到期后,提現(xiàn)自己的本金和收益,我們后臺(tái)系統(tǒng)有專(zhuān)門(mén)的提現(xiàn)審核功能,通過(guò)系統(tǒng)審核該投資用戶的資金流是否有異常,無(wú)異常方可通過(guò)提現(xiàn)審核。
● 你們使用定時(shí)任務(wù)是干什么的?
我們使用定時(shí)任務(wù)主要是處理一些定時(shí)或延遲的工作,這些工作不需要馬上處理,就配置好時(shí)間,讓程序在指定的時(shí)間或者指定的頻率去執(zhí)行,比如我們?cè)诶碡?cái)產(chǎn)品投資滿標(biāo)后,會(huì)生成收益計(jì)劃,投資到期后給用戶返回收益等,我們都是采用定時(shí)任務(wù)來(lái)完成的,Spring框架集成支持定時(shí)任務(wù),我們采用的就是spring框架下的spring-task來(lái)實(shí)現(xiàn)定時(shí)任務(wù);
● 請(qǐng)你描述一下整個(gè)P2P的支付流程?
支付模塊,我們當(dāng)時(shí)對(duì)接了兩家,一家快錢(qián)支付,一家豐付支付,當(dāng)時(shí)是由我開(kāi)發(fā)的,我們的商務(wù)和對(duì)方談好后并簽訂了支付協(xié)議,對(duì)方的技術(shù)給我們提供了相關(guān)的支付接口文檔及demo,我主要是根據(jù)對(duì)方的接口文檔進(jìn)行開(kāi)發(fā),首先是調(diào)用對(duì)方提供的支付下單接口,把我這邊準(zhǔn)備好的參數(shù)傳給對(duì)方,然后調(diào)用對(duì)方接口,根據(jù)對(duì)方的返回信息進(jìn)行處理,如果對(duì)方返回成功,然后調(diào)用對(duì)方的獲取短信驗(yàn)證碼接口,此時(shí)將給用戶的手機(jī)號(hào)發(fā)送一個(gè)支付驗(yàn)證碼,用戶輸入支付短信驗(yàn)證碼后,點(diǎn)擊確定支付,然后我們提交支付請(qǐng)求,對(duì)方將返回支付的結(jié)果,支付結(jié)果對(duì)方會(huì)通過(guò)兩種方式返回,一個(gè)是同步返回,一個(gè)是異步返回,我們接收對(duì)方的這兩個(gè)返回結(jié)果,更新我們的數(shù)據(jù)庫(kù)狀態(tài),完成整個(gè)支付流程;
● 請(qǐng)介紹一下這個(gè)P2P項(xiàng)目的整體架構(gòu)及你做了什么?
整個(gè)P2P項(xiàng)目第一個(gè)版本,我們是采用普通的ssm框架進(jìn)行開(kāi)發(fā)的,是一種集中式的開(kāi)發(fā)方式,上線一年之后,隨著公司發(fā)展和業(yè)務(wù)需要,我們?cè)瓉?lái)的ssm架構(gòu)的項(xiàng)目,代碼非常龐大和混亂,一個(gè)方法可能出現(xiàn)好幾百行,里面很多邏輯,要新增一個(gè)功能,開(kāi)發(fā)特別慢,由于修改這個(gè)功能,可能又導(dǎo)致另一個(gè)功能出現(xiàn)問(wèn)題或者bug,后來(lái)我們對(duì)整個(gè)p2p項(xiàng)目進(jìn)行了重構(gòu),采用分布式開(kāi)發(fā)方式,當(dāng)時(shí)選擇了非常流行的Dubbo分布式開(kāi)發(fā)框架,主要架構(gòu)是spring mvc + spring + dubbo +mybatis的架構(gòu),另外還有一些中間件,dubbo注冊(cè)中心zookeeper,緩存Redis、隊(duì)列ActiveMQ、文件存儲(chǔ)FastDFS,Session同步Sprign Session等;
在這個(gè)項(xiàng)目中,我參與了整個(gè)過(guò)程的開(kāi)發(fā),當(dāng)時(shí)公司處于快速發(fā)展中,工作分工并不明確,前后臺(tái)基本都會(huì)參與開(kāi)發(fā),我先是開(kāi)發(fā)了p2p前端網(wǎng)站部分的理財(cái)產(chǎn)品展示、用戶投資、用戶充值三大功能模塊,同時(shí)開(kāi)發(fā)這些模塊對(duì)應(yīng)的Dubbo服務(wù),其中的支付模塊,是單獨(dú)一個(gè)項(xiàng)目,主要對(duì)接第三方支付接口,快錢(qián)和豐付,這個(gè)項(xiàng)目全部是我完成的,對(duì)此我也比較熟悉。
● 你們這個(gè)P2P項(xiàng)目的并發(fā)量大概多少,部署了幾臺(tái)tomcat?
我們P2P項(xiàng)目有三端,一個(gè)是PC端,一個(gè)是H5端,一個(gè)的App端,其中H5端的流量比較小,并發(fā)量也很低,PC端和App端并發(fā)量高一些,其中App端并發(fā)量最大,因?yàn)锳pp端的用戶最多,App端的后端接口部署了5臺(tái)tomcat,最大的并發(fā)是3500左右,這個(gè)3500是同時(shí)處理請(qǐng)求的能力,而不是一段時(shí)間或者多少秒的處理能力,QPS大約是30萬(wàn)左右,整個(gè)平臺(tái)大約有200萬(wàn)左右的用戶;
● 你們P2P項(xiàng)目中分布式事務(wù)怎么解決和處理的?
我們這個(gè)P2P項(xiàng)目,后端的服務(wù),沒(méi)有再拆分,就是一個(gè)dubbo服務(wù),所以一個(gè)事務(wù)請(qǐng)求會(huì)提交到一個(gè)項(xiàng)目單元上執(zhí)行,這樣我們是避免了分布式事務(wù)的問(wèn)題,因?yàn)閷?duì)于一般的中小型項(xiàng)目,也建議不涉及到分布式事務(wù)的問(wèn)題,也就是說(shuō)能避免盡量避免,而在一些大型項(xiàng)目中無(wú)法避免需要分布式事務(wù)時(shí),目前常用的解決方案是:
1、兩階段提交;
2、三階段提交;
3、TCC補(bǔ)償;
4、異步確保;
5、最大努力通知;
● 為什么充值會(huì)發(fā)生掉單問(wèn)題?怎么解決的?
充值時(shí)候與第三方接口對(duì)接的過(guò)程中,涉及到多個(gè)系統(tǒng),每個(gè)系統(tǒng)都無(wú)法保證整個(gè)充值過(guò)程中都是100%的高可用,還有網(wǎng)絡(luò)等原因,就不可避免會(huì)出現(xiàn)某個(gè)系統(tǒng)成功了,另一個(gè)系統(tǒng)沒(méi)有成功的問(wèn)題,當(dāng)出現(xiàn)這種情況的時(shí)候,這筆充值就會(huì)出現(xiàn)數(shù)據(jù)狀態(tài)的不一致,也就是掉單,為了解決該問(wèn)題,我們采用的是一種補(bǔ)償機(jī)制,在發(fā)生掉單后,進(jìn)行自動(dòng)補(bǔ)償,系統(tǒng)開(kāi)啟一個(gè)定時(shí)任務(wù),對(duì)出現(xiàn)掉單的訂單進(jìn)行再次補(bǔ)償,我們會(huì)先檢索出掉單的訂單,然后通過(guò)第三方支付系統(tǒng)的接口,查詢?cè)撚唵蔚某渲禒顟B(tài),如果第三方已經(jīng)成功了,我們這邊系統(tǒng)就需要更新相關(guān)的數(shù)據(jù);
● 你們的P2P項(xiàng)目使用Redis主要做什么?
在該項(xiàng)目中,最初沒(méi)有使用Redis,是邊運(yùn)營(yíng)邊迭代升級(jí)的,在沒(méi)有使用Redis的時(shí)候,我們的前端業(yè)務(wù)系統(tǒng)上的所有數(shù)據(jù)都是直接到達(dá)數(shù)據(jù)庫(kù)獲取,導(dǎo)致我們后端的數(shù)據(jù)庫(kù)經(jīng)常出現(xiàn)cpu及io壓力很大,后續(xù)我們將前端業(yè)務(wù)系統(tǒng)上一些不需要實(shí)時(shí)更新的數(shù)據(jù),一些頻繁查詢的熱點(diǎn)數(shù)據(jù),進(jìn)行了Redis緩存存儲(chǔ),來(lái)提升系統(tǒng)的能力。
● 生產(chǎn)環(huán)境(線上環(huán)境)中出現(xiàn)的問(wèn)題,你們是怎么解決的?
生產(chǎn)中的問(wèn)題,發(fā)現(xiàn)后由該系統(tǒng)的技術(shù)負(fù)責(zé)人全力協(xié)調(diào)解決,如果是緊急影響較大的bug,會(huì)暫時(shí)下線該功能,快速對(duì)該問(wèn)題進(jìn)行修復(fù),然后由測(cè)試團(tuán)隊(duì)進(jìn)行嚴(yán)格測(cè)試,再上線,再次上線前將之前由于bug產(chǎn)生的數(shù)據(jù)問(wèn)題進(jìn)行修復(fù)。處理線上問(wèn)題的步驟是先判斷問(wèn)題的嚴(yán)重程序、波及范圍等,優(yōu)先快速恢復(fù)服務(wù),讓用戶可以繼續(xù)使用,然后再解決bug,排查bug主要是根據(jù)線上日志、數(shù)據(jù)庫(kù)數(shù)據(jù)等;
● 你們P2P項(xiàng)目的利息是怎么計(jì)算的?
利息的計(jì)算,公司的產(chǎn)品經(jīng)理提供了計(jì)算公式,我們技術(shù)人員根據(jù)計(jì)算公式進(jìn)行計(jì)算,由于涉及到精度問(wèn)題,所有計(jì)算都是采用BigDecimal類(lèi)型進(jìn)行加減乘除;
● 用戶在你的P2P充值,如何防止你的請(qǐng)求被黑客攔截,給你返回一個(gè)假的充值成功結(jié)果?實(shí)際用戶未支付,但你系統(tǒng)給用戶充了值?
這個(gè)問(wèn)題,我們有簽名驗(yàn)簽機(jī)制就保證了,我們的請(qǐng)求中都有一個(gè)簽名串,簽名串黑客無(wú)法偽造,如果簽名串驗(yàn)證無(wú)法通過(guò),我們將不會(huì)給用戶充值,提示簽名失敗;
● 如何防止用戶重復(fù)點(diǎn)擊、重復(fù)提交充值?
用戶點(diǎn)擊后我們會(huì)將用戶的提交在redis中存放一個(gè)標(biāo)志,如果用戶重復(fù)提交,我們會(huì)檢查redis的標(biāo)志,來(lái)拒絕用戶的第二次提交,值處理第一次提交請(qǐng)求;
● 用戶的錢(qián)的整個(gè)流轉(zhuǎn)過(guò)程是怎么樣的?
用戶通過(guò)第三方充值渠道,將用戶銀行卡的資金劃入到P2P平臺(tái)在第三方支付公司開(kāi)通的賬戶中,然后我們會(huì)把用戶的充值金額記錄在我們的數(shù)據(jù)庫(kù)用戶資金記錄表中,當(dāng)用戶投資某個(gè)產(chǎn)品,比如100元,我們會(huì)將用戶資金記錄表中的資金凍結(jié)掉投資金額100元,當(dāng)投資到期后,會(huì)產(chǎn)生收益,比如收益是1元,那么我們就會(huì)將之前凍結(jié)的100元,再加上收益1元返回到用戶的資金記錄表中,最后用戶提現(xiàn)101元,我們的后臺(tái)結(jié)算系統(tǒng)審核用戶的提現(xiàn)金額,審核通過(guò)后,通過(guò)第三方支付公司,從我們P2P平臺(tái)在第三支付公司開(kāi)通的賬戶中扣除101元,將101元打入用戶提交的銀行賬號(hào)中;
● 請(qǐng)介紹一下你做的這個(gè)P2P項(xiàng)目?
該項(xiàng)目是一個(gè)基于互聯(lián)網(wǎng)金融的網(wǎng)貸平臺(tái),有理財(cái)端和借款端,我主要是參與做的理財(cái)端,該項(xiàng)目主要包括PC站、M站、APP客戶端(Android、iOS),由多個(gè)項(xiàng)目系統(tǒng)構(gòu)成,包括前端業(yè)務(wù)系統(tǒng)PC端和H5端、數(shù)據(jù)接口系統(tǒng)、核心系統(tǒng)、結(jié)算系統(tǒng)、支付系統(tǒng)、定時(shí)任務(wù)系統(tǒng)、營(yíng)銷(xiāo)活動(dòng)系統(tǒng),紅包系統(tǒng),合同簽章系統(tǒng)、實(shí)名認(rèn)證接口系統(tǒng)、輪播圖系統(tǒng)等。
整個(gè)項(xiàng)目采用分布式開(kāi)發(fā)模式,Tomcat集群部署,采用Nginx實(shí)現(xiàn)負(fù)載均衡和動(dòng)靜分離,MySQL主從復(fù)制模式,Redis集群模式,ActiveMQ的異步處理、Zookeeper做為注冊(cè)中心,Spring session共享,Redis集群緩存熱點(diǎn)數(shù)據(jù)提升系統(tǒng)吞吐量,整個(gè)項(xiàng)目采用的技術(shù)架構(gòu)主要是:Spring mvc + Spring + Dubbo +MyBatis, 采用Dubbo實(shí)現(xiàn)項(xiàng)目間的RPC調(diào)用,采用分布式文件系統(tǒng)FastDFS存儲(chǔ)投資借款合同。
我在這個(gè)平臺(tái)中參與過(guò)前端業(yè)務(wù)系統(tǒng),Dubbo數(shù)據(jù)接口系統(tǒng),支付接口系統(tǒng)、合同簽章系統(tǒng)的開(kāi)發(fā),對(duì)這幾個(gè)系統(tǒng)比較熟悉,通過(guò)這個(gè)項(xiàng)目,遇到過(guò)一些問(wèn)題,也學(xué)到很多東西。比如最早的時(shí)候,對(duì)Dubbo開(kāi)發(fā)框架不是很了解,通過(guò)該項(xiàng)目,現(xiàn)在比較得心應(yīng)手。
互聯(lián)網(wǎng)分布式專(zhuān)題
● 你都知道哪些技術(shù)可以完成異構(gòu)系統(tǒng)整合?
httpclient、webservices
● 自我介紹?
面試官您好,我叫XX,非常高興認(rèn)識(shí)您。到目前為止我從事Java軟件編碼工作已經(jīng)3年了,之前一直在石家莊的XX公司工作,他是一家外包公司,在這期間我接觸了有六七個(gè)項(xiàng)目,其中包括政府部門(mén)的項(xiàng)目、銀行相關(guān)的項(xiàng)目、還有互聯(lián)網(wǎng)公司相關(guān)的項(xiàng)目,最近做的是一個(gè)P2P互聯(lián)網(wǎng)金融項(xiàng)目。北京這邊畢竟軟件環(huán)境好一些,有一些朋友也來(lái)到北京發(fā)展情況挺好的,所以前兩天把石家莊的工作辭掉了,想在北京闖一闖。這就是我的個(gè)人情況,謝謝。
說(shuō)明:這只是一個(gè)參考的模板,自行修改,并且在進(jìn)行自我介紹的時(shí)候不要死記硬背。要用描述性的語(yǔ)言說(shuō)出來(lái)。
● 說(shuō)一個(gè)我們留下你的理由?
首先,我個(gè)人非常喜歡熱愛(ài)Java軟件開(kāi)發(fā)這份工作,我喜歡耐心的做一件事,實(shí)現(xiàn)一個(gè)一個(gè)客戶的需求。
其次,我的技術(shù)能力完全可以勝任咱們這份工作,技術(shù)這塊您放心,肯定不掉鏈子,按時(shí)按點(diǎn)完成領(lǐng)導(dǎo)交辦的任務(wù)。
另外,我也喜歡咱們公司的企業(yè)文化以及工作氛圍。希望貴公司能給一次機(jī)會(huì)。
● 你還有什么要問(wèn)的嗎?
基本上也沒(méi)什么問(wèn)題了,我就是想知道一下咱們團(tuán)隊(duì)開(kāi)發(fā)使用的是哪些技術(shù),如果可以的話,我回去抓緊時(shí)間熟悉一下。比如用的哪些框架,后臺(tái)使用的什么技術(shù),前端使用的什么框架等。
● 你的期望薪資是多少?
多種回答方式:第一種是直接說(shuō)一個(gè)薪資值,例如:10K左右是可以接受的(帶個(gè)左右,不要說(shuō)區(qū)間值,千萬(wàn)別說(shuō)10~15)。第二種方式可以這樣說(shuō):我來(lái)之前也對(duì)北京這塊的薪資結(jié)構(gòu)有了一定的了解,3年工作經(jīng)驗(yàn)在北京這塊大概在12K以上,所以12K左右都可以接受,當(dāng)然,薪資這塊不是硬性要求,能夠遇到一個(gè)好的團(tuán)隊(duì),優(yōu)秀的企業(yè)這是最主要的。
● 說(shuō)一下職業(yè)規(guī)劃?
其實(shí)具體的職業(yè)規(guī)劃目前也沒(méi)有刻意的去制定過(guò),目前來(lái)說(shuō)我還是希望能夠把技術(shù)底層再好好的研究一下,比如像數(shù)據(jù)結(jié)構(gòu)、算法、框架底層源代碼等。我還是比較喜歡鉆研技術(shù)。
● 你平時(shí)除了開(kāi)發(fā)還干什么?
平時(shí)除了編碼之外,主要還是為公司產(chǎn)品解決一些線上的問(wèn)題,調(diào)一些bug。另外還會(huì)寫(xiě)日?qǐng)?bào)周報(bào)、參與各種會(huì)議、和產(chǎn)品溝通、和測(cè)試溝通等等,閑暇時(shí)間會(huì)學(xué)習(xí)一些新的技術(shù)。
● 項(xiàng)目經(jīng)理通過(guò)什么方式分配任務(wù)?
這個(gè)問(wèn)題的答案不是固定的,因?yàn)槊總€(gè)團(tuán)隊(duì)的管理方式不同。比較正規(guī)的大的公司一般會(huì)使用專(zhuān)業(yè)的工具,例如project、Planisware工具,但這些工具使用復(fù)雜。對(duì)于一些規(guī)模比較小的公司來(lái)說(shuō)一般excel就搞定了,在excel表格中描述任務(wù)并自動(dòng)生成甘特圖來(lái)跟蹤任務(wù)的進(jìn)展。(建議這樣回答:我們項(xiàng)目組使用的excel進(jìn)行任務(wù)分配的,在excel中標(biāo)上一些特殊的顏色,來(lái)表示不同的進(jìn)度。)
● 項(xiàng)目經(jīng)理怎么監(jiān)控項(xiàng)目進(jìn)度的?
每一天我們都要按時(shí)提交日?qǐng)?bào),每一周都要按時(shí)提交周報(bào),項(xiàng)目經(jīng)理通過(guò)日?qǐng)?bào)周報(bào)等形式監(jiān)控項(xiàng)目進(jìn)度。
● 項(xiàng)目經(jīng)理怎么監(jiān)控代碼質(zhì)量的?
不定期的進(jìn)行代碼走查(代碼review),項(xiàng)目經(jīng)理、組長(zhǎng)、程序員一起到會(huì)議室,打開(kāi)投影儀,把最近幾天的代碼一行一行的看一看,主要看看代碼的注釋、代碼的格式、代碼的命名規(guī)范、代碼的冗余度等。
● 怎么和測(cè)試溝通的?
● 你平時(shí)和誰(shuí)溝通較多?
通過(guò)上圖可以看出,開(kāi)發(fā)通常和產(chǎn)品、測(cè)試溝通較多。
● 你們小組是怎么溝通的?
● 你們平時(shí)都什么時(shí)候開(kāi)會(huì),都開(kāi)什么會(huì)?
一般都會(huì)有晨會(huì)(小組會(huì)議)。
每日晨會(huì)是敏捷開(kāi)發(fā)過(guò)程中最為重要的一個(gè)環(huán)節(jié)。核心團(tuán)隊(duì)成員每天早上開(kāi)一個(gè)非常短的碰頭會(huì),每人平均2到3分鐘,介紹昨天做了什么,今天要做什么,有什么困難沒(méi)有。
主要目的是便于項(xiàng)目管理人員了解任務(wù)開(kāi)發(fā)狀態(tài),發(fā)現(xiàn)潛在的隱患,督促團(tuán)隊(duì)成員勤勉工作,幫助解決困難。
一般采用站立式非正規(guī)會(huì)議,集中在一個(gè)小會(huì)議室或者是在稍微偏僻一點(diǎn)的走廊。
當(dāng)項(xiàng)目管理人員發(fā)現(xiàn)某個(gè)團(tuán)隊(duì)成員工作不力或者是遇到困難的時(shí)候,除在會(huì)議上作簡(jiǎn)短確認(rèn)以及詢問(wèn)其它團(tuán)隊(duì)成員能否幫助外,還應(yīng)在會(huì)后與當(dāng)事人進(jìn)行詳細(xì)溝通。
有一些公司會(huì)有夕會(huì),下班時(shí)候的一個(gè)碰頭會(huì)(小組會(huì)議)。
每周都會(huì)有周例會(huì)(公司的所有成員會(huì)議)。
● 為什么從上家公司離職?
北京這邊的軟件環(huán)境好一些,趁年輕想來(lái)大城市闖一闖。
● 你上家公司在哪,哪條路,哪個(gè)大廈?
這個(gè)題目就需要隨機(jī)應(yīng)變了,比如:上家公司在北京大興區(qū),經(jīng)濟(jì)技術(shù)開(kāi)發(fā)區(qū),涼水河二街,大族企業(yè)灣,11號(hào)樓A座三層。
● 你上家公司是做哪個(gè)行業(yè)的?
這個(gè)題目需要大家查一下“之前工作的公司”,了解一下該公司主要做哪一方面的。如果上一家工作的公司是外包公司那是不錯(cuò)的。因?yàn)楸煌馀沙鋈サ娜藛T可能會(huì)接觸不同行業(yè)的項(xiàng)目。
● 對(duì)你上家公司進(jìn)行一個(gè)評(píng)價(jià)?
我相信面試官您也看到了,自從我大學(xué)畢業(yè)到現(xiàn)在一直在上家公司工作,這也充分證明了我對(duì)上家公司的認(rèn)可。上家公司擁有良好的企業(yè)文化,為我們提供了良好的工作環(huán)境,我們團(tuán)隊(duì)也構(gòu)建了一個(gè)良好的工作氛圍,大家工作都很積極努力,團(tuán)隊(duì)成員也都很照顧我,如果還有機(jī)會(huì)回到石家莊工作的話,我希望能再回到這家公司。
● 說(shuō)一下你的離職流程?
我離職的前1個(gè)月提出了申請(qǐng),然后我們老大就開(kāi)始招人,招到后,我就開(kāi)始和新人進(jìn)行工作交接,直到新人能夠上手,我就離開(kāi)了。
● 你們多少人開(kāi)發(fā)這個(gè)項(xiàng)目?
● 說(shuō)一下你們項(xiàng)目組的組織架構(gòu)/人員分配?
● 你們分組了嗎,都是什么組,你在哪一組?
● 你和領(lǐng)導(dǎo)在一些想法上產(chǎn)生了分歧,你怎么做?
在工作中,和領(lǐng)導(dǎo)打交道是一個(gè)技術(shù)活,讓領(lǐng)導(dǎo)開(kāi)心很重要,但也不能委屈了自己,當(dāng)和領(lǐng)導(dǎo)產(chǎn)生分歧后,好盡量的去挽救雙方之間的關(guān)系,畢竟自己使下屬,在該讓步的時(shí)候還是要學(xué)會(huì)讓步。
第一:積極的溝通。也許是領(lǐng)導(dǎo)不了你的實(shí)際情況,沒(méi)看到你的付出和努力,對(duì)你產(chǎn)生了誤解,所以適當(dāng)?shù)臏贤ň秃苤匾恕?/span>
第二:保持不卑不亢的態(tài)度。在產(chǎn)生分歧的時(shí)候,不要一味的退讓或者太過(guò)于強(qiáng)勢(shì),凡是都是可以溝通的,讓領(lǐng)導(dǎo)看到自己的工作態(tài)度很重要。
第三:顯示出自己對(duì)領(lǐng)導(dǎo)的尊重。也許你的工作能力是比較出眾的,但是一定要給足領(lǐng)導(dǎo)面子,讓領(lǐng)導(dǎo)看出自己的態(tài)度,免得給領(lǐng)導(dǎo)留下了不好的態(tài)度。
第四:選擇求同存異的處理手法。特別是解決工作上的問(wèn)題,手段是有很多的,你考慮的方向和領(lǐng)導(dǎo)考慮的方向可能會(huì)有所出入,可以選擇一種大家都認(rèn)同的方法來(lái)處理。
第五:領(lǐng)導(dǎo)布置的任務(wù)要好好的完成。就算是和領(lǐng)導(dǎo)有分歧,但是領(lǐng)導(dǎo)布置的任務(wù)還是要好好的完成,這樣可以顯示出自己對(duì)工作一絲不茍的態(tài)度,也會(huì)的到領(lǐng)導(dǎo)的贊賞。
第六:在不改變自己原則的前提下妥協(xié)。先要表明自己的立場(chǎng),讓自己不做違背自己本心的事情,然后考慮妥協(xié),對(duì)方是領(lǐng)導(dǎo),很有可能是你處于被動(dòng)的地步,所以適當(dāng)?shù)耐讌f(xié)是有必要的。
● 你們項(xiàng)目組使用的是哪個(gè)項(xiàng)目管理軟件?
禪道。
● 你們項(xiàng)目組使用的是哪個(gè)版本控制工具?
最近兩年的開(kāi)發(fā)一直在使用Git,感覺(jué)Git比SVN好用。Git是基于分布式的。
● 你之前交過(guò)社保嗎?
之前沒(méi)有繳納過(guò)社保,公司每個(gè)月有800元補(bǔ)助。(之前在北京工作過(guò),并且在北京交過(guò)社保的同學(xué),可以回答:交過(guò)社保。如果社保不是連續(xù)的,可以告訴面試官,社保中間斷了,不想交社保了,公司每個(gè)月有800元補(bǔ)助。)
● 程序員苦逼的一天?
其它
● 你們的測(cè)試環(huán)境是怎樣的?
我們的測(cè)試環(huán)境模擬的就是生產(chǎn)環(huán)境,只不過(guò)生產(chǎn)環(huán)境中服務(wù)器硬件要多一些,在測(cè)試環(huán)境中一個(gè)機(jī)器上會(huì)安裝多個(gè)軟件。
● AJAX跨域你是怎么實(shí)現(xiàn)的?
首先我先給您解釋一下我理解的跨域,為什么會(huì)有跨域呢?這是因?yàn)闉g覽器的同源策略導(dǎo)致的,同源策略是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽器的正常功能可能都會(huì)受到影響。可以說(shuō) Web 是構(gòu)建在同源策略基礎(chǔ)之上的,瀏覽器只是針對(duì)同源策略的一種實(shí)現(xiàn)。它的核心就在于它認(rèn)為來(lái)自任何站點(diǎn)裝載的信賴內(nèi)容是不安全的。當(dāng)被瀏覽器半信半疑的腳本運(yùn)行在沙箱時(shí),它們應(yīng)該只被允許訪問(wèn)來(lái)自同一站點(diǎn)的資源,而不是那些來(lái)自其它站點(diǎn)可能懷有惡意的資源。所謂同源是指:域名、協(xié)議、端口相同。所以跨域限制主要的目的就是為了用戶的上網(wǎng)安全。不過(guò)在實(shí)際的開(kāi)發(fā)中有很多情況下需要我們實(shí)現(xiàn)跨域訪問(wèn),因?yàn)橥粋€(gè)項(xiàng)目的不同服務(wù)可能部署在不同的服務(wù)器當(dāng)中,服務(wù)器A調(diào)用服務(wù)器B當(dāng)中的資源時(shí),就涉及到了跨域問(wèn)題,那么怎么解決AJAX跨域呢?
第一種方式:JSONP方式解決跨域問(wèn)題。
jsonp解決跨域問(wèn)題是一個(gè)比較古老的方案(實(shí)際中不推薦使用),實(shí)際項(xiàng)目中如果要使用JSONP,一般會(huì)使用jQuery對(duì)JSONP進(jìn)行了封裝的類(lèi)庫(kù)來(lái)進(jìn)行ajax請(qǐng)求。