說在前面,面試時最好不要虛報工資,本來位元組跳動是很想去的,幾輪面試也通過了,最后沒offer,自己只想到幾個原因:1、虛報工資,比實際高30%;2、有更好的人選,這個可能性不大,我看還在招聘,我是面試Android開發的,3年經驗,下面是面試流程:
一面
1.插件化,啟動activity的hook方式,taskAffity, 2.okhttp支持HTTP2?http2的功能有哪些?tcp方面擁塞控制?tsl的握手和具體的非對稱加密演算法,非對稱名稱 3.handler的post(Runnable)如何實作的,callback,runnable,msg的執行優先級, 4.阻塞是怎么實作的?為什么不會阻塞主執行緒? 5.求二叉樹中兩個節點之間的最大距離, 6.206含義,未修改資源是哪個,302含義,301含義 7.多行程通信問題,binder優勢,aidl生成的java類細節,多行程遇到哪些問題? 8.動態代理傳入的引數都有哪些?非介面的類能實作動態代理嗎?ASM的原理 9.Application和Activity在Context的繼承樹上有何區別?二者使用上有何不同? 10.任意一顆二叉樹,求最大節點距離
二面
1.設計一個日志系統, 2.記憶體泄露的分類,怎么查看記憶體泄露的問題 3.touch事件原始碼問題, 4.組件化的問題,module和app之間的區別,moduler通信是如何實作的, 5.native奔潰的日志采集,怎么處理? 6.注解實作一個提示功能:如果int的值大于了3需要提示,
三面
1.介紹下flutter的啟動流程 2.介紹下flutter與weex的區別 3.組件化介紹一下 4.webview中與js通信的手段有哪些? 5.介紹下flutter_boost的原理
四面
1.配接器和裝飾模式各自特點和使用場景 2.視頻編解碼是怎么做的 3.三色球排序
HR面
1.詢問了除位元組跳動以外,還在看其他作業機會么?分別是什么 2.位元組、XXX公司、XXX公司,你的優先級是什么,為什么? 3.之前薪資待遇是多少?你期望的薪資是多少? 4.平時有什么愛好? 5.了解職位需求嗎? 6.有沒有想問的?
這是我在某論壇看到的故事,我知道我們很多程式員都有一個大廠夢,但如何針對大廠進行面試準備,如何和 HR 聊天,比如談錢等等,很多程式員就顯得手足無措了,本文就根據自己一些見解談談這些問題,
什么是合適的候選者
在介紹如何面試之前,這里先從公司的角度來分析:”到底什么樣的候選者是公司所需要的技術人才?“就我在現在這家公司的一些面試官經驗來說,一個具有如下特征的Android程式員是我們所需要的:
- 具有本科及以上學歷(名校更好)
- 具有2年及以上的作業經驗(名企更好)
- 技術扎實,有技術追求和作業激情
- 良好的溝通和協作
在上面的四條中,其中第3條是最為重要的,即技術,技術是決定能否通過面試的最重要最直接的原因,一般來說,越是大公司,其對技術的要求就越高,盡管部分崗位并不需要那么好的技術,但是為了對候選者做出區分,其面試程序仍然會面試一些稍微深入的話題,相信大家都有所體會,
除了技術以外,良好的溝通和協作能力也是比較重要的,也許很多人覺得這個比較抽象,心里會想:”你怎么知道我有沒有良好的溝通和協作能力呢“?其實這個問題并不難,面試程序就是一次溝通程序,如果不能和面試官很好地溝通,這就說明候選者的溝通有問題,如何很好地和面試官溝通呢?給如下幾點建議:
- 禮貌和尊重,
- 聽懂面試官的問題并直接回答,
- 謙虛謹慎、態度友好,
下面對學歷和作業經驗做一些說明,學歷并不是一個硬性要求,即使候選者學校不怎么好也是有可能通過面試的,這就要求候選者技術非常扎實,而作業經驗,之所以是2年以上,這是因為社會招聘的物件一般都是有一定作業經驗的,而1年作業經驗略短了點,拿百度來說,社招的最低級別一般為T4,差不多剛好就是2年經驗左右,
這里做下總結,理想的候選者應該是這樣的:
- 扎實的技術功底,有技術追求(必須)
- 態度、溝通和為人都很好(必須)
- 2年左右作業經驗(基本必須)
- 名校、名企、高學歷(非必須,加分項)
基本來說,滿足1和2就能通過面試,3和4都是次要條件,但是一般來說不滿足3就很難滿足1,不要說特例,木有參考意義,
由此可見,技術是面試結果的決定因素,那么到底技術掌握到什么程度才能比較輕松地通過面試呢?說了那么多,好像和Android沒有一點關系,下面就開始以Android為例來分析下面試程序所需的技術,
技術知識梳理目錄
下面的所有技術知識點詳細內容都整理在了開源專案添加小助理vx:MAYAZBSP
1.JAVA多執行緒并發
- JAVA并發知識庫
- JAVA執行緒實作/創建方式
- 4種執行緒池
- 執行緒生命周期(狀態)
- 終止執行緒4種方式
- sleep與wait 區別
- start與run區別
- JAVA后臺執行緒
- JAVA鎖
- 執行緒基本方法4.1.11. 執行緒背景關系切換
- 同步鎖與死鎖
- 執行緒池原理
- JAVA阻塞佇列原理
- CyclicBarrier、CountDownLatch、Semaphore的用法
- volatile關鍵字的作用(變數可見性、禁止重排序)
- 如何在兩個執行緒之間共享資料

2.微服務
- 服務注冊發現
- API 網關
- 配置中心
- 事件調度(kafka)
- 服務跟蹤(starter-sleuth)
- 服務熔斷(Hystrix)
- Hystrix斷路器機制
- API管理

3.分布式快取
- 快取雪崩
- 快取穿透
- 快取預熱
- 快取更新
- 快取降級

4.Spring 原理
- Spring 特點
- Spring 核心組件
- Spring 常用模塊
- Spring 主要包
- Spring 常用注解
- Spring第三方結合
- Spring IOC原理
- Spring APO原理
- Spring MVC原理
- Spring Boot原理
- JPA原理
- Mybatis快取
- Tomcat架構

5.JVM
- 執行緒
- JVM記憶體區域
- JVM運行時記憶體
- 垃圾回收與演算法
- JAVA 四中參考型別
- GC分代收集演算法 VS 磁區收集演算法
- GC垃圾收集器
- JAVA IO/NIO
- JVM 類加載機制

6.JAVA基礎
- JAVA例外分類及處理
- JAVA反射
- JAVA注解
- JAVA內部類
- JAVA泛型
- JAVA序列化(創建可復用的Java物件)
- JAVA復制

7.JAVA集合
- 介面繼承關系和實作
- List
- ArrayList(陣列)
- Vector(陣列實作、執行緒同步)
- LinkList(鏈表)
- Set
- HashSet(Hash表)
- TreeSet(二叉樹)

8.Netty 與RPC
- Netty 原理
- Netty 高性能
- Netty RPC實作
- 關鍵技術
- 核心流程
- 訊息編解碼
- 通訊程序
- RMI實作方式

9.日志
- Slf4j
- Log4j
- LogBack
- Logback優點
- ELK

10.Zookeeper
- Zookeeper概念
- Zookeeper角色
- Zookeeper作業原理(原子廣播)
- Znode有四種形式的目錄節點

11.Kafka
- Kafka概念
- Kafka資料存盤設計
- partition的資料檔案(offset,MessageSize,data)
- 資料檔案分段segment(順序讀寫、分段命令、二分查找)
- 資料檔案索引(分段索引、稀疏存盤)
- 生產者設計
- 負載均衡(partition會均衡分布到不同broker上)
- 批量發送
- 壓縮(GZIP或Snappy)
- 消費者設計

12.Hbase
- Hbase概念
- 列式存盤
- Hbase核心概念
- Hbase核心架構
- Hbase的寫邏輯
- HBase vs Cassandra
- MongoDB
- MongoDB概念
- MongoDB特點

13.Cassandra
- Cassandra概念
- 資料模型
- Cassandra一致Hash和虛擬節點
- Gossip協議
- 資料復制
- 資料寫請求和協調者
- 資料讀請求和后臺修復
- 資料存盤(CommitLog、MemTable、SSTable)
- 二級索引(對要索引的value摘要,生成RowKey)
- 資料讀寫

14.RabbitMQ
- RabbitMQ概念
- RabbitMQ架構
- Exchange 型別

15.設計模式
- 設計原則
- 工廠方法模式
- 抽象工廠模式
- 單例模式
- 建造者模式
- 原型模式
- 配接器模式
- 裝飾器模式
- 代理模式
- 外觀模式
- 橋接模式
- 組合模式
- 享元模式
- 策略模式
- 模板方法模式
- 觀察者模式
- 迭代子模式
- 責任鏈模式
- 命令模式
- 備忘錄模式

16.負載均衡
- 四層負載均衡 vs 七層負載均衡
- 負載均衡演算法/策略
- LVS
- Keepalive
- Nginx反向代理負載均衡
- HAProxy

17.資料庫
- 存盤引擎
- 索引
- 資料庫三范式
- 資料庫是事務
- 存盤程序(特定功能的SQL 陳述句集)
- 觸發器(一段能自動執行的程式)
- 資料庫并發策略
- 資料庫鎖
- 基于Redis分布式鎖
- 磁區分表
- 兩階段提交協議
- 三階段提交協議
- 柔性事務
- CAP

18.JAVA演算法
- 二分查找
- 冒泡排序演算法
- 插入排序演算法
- 快速排序演算法
- 希爾排序演算法
- 歸并排序演算法
- 桶排序演算法
- 基數排序演算法
- 剪枝演算法
- 回溯演算法
- 最短路徑演算法
- 最大子陣列演算法
- 最長公共子序演算法
- 最小生成樹演算法

19.資料結構
- 堆疊(stack)
- 佇列(queue)
- 鏈表(Link)
- 散串列(Hash Table)
- 排序二叉樹
- 紅黑樹
- B-TREE
- 位圖

20.一致性演算法
- Paxos
- Zab
- Raft
- NWR
- Gossip
- 一致性Hash
- 一致性Hash特性
- 一致性Hash原理

21.Spark
- Spark概念
- 核心架構
- 核心組件
- SPARK編程模型
- SPARK計算模型
- SPARK運行流程
- SPARK RDD流程
- SPARK RDD

22.Storm
- Storm概念
- 集群架構
- Nimbus(master-代碼分發給Supervisor)
- Supervisor(slave-管理Worker行程的啟動和終止)
- Worker(具體處理組件邏輯的行程)
- Task
- ZooKeeper
- 編程模型(spout->tuple->bolt)
- opology運行
- Storm Streaming Grouping
- ResourceManager
- NodeManager
- ApplicationMaster
- YARN運行流程

23.云計算
- SaaS
- PaaS
- IaaS
- Docker
- Openstack
- Namespaces
- 行程(CLONE_NEWPID 實作的行程隔離)
- Libnetwork與網路隔離
- 資源隔離與CGroups
- 鏡像與UnionFS
- 存盤驅動

24.Hadoop
- Hadoop概念
- HDFS
- Client
- NameNode
- Secondary NameNode
- DataNode
- MapReduce
- JobTracker
- TaskTracker
- Task
- Reduce Task 執行程序
- Hadoop MapReduce 作業的生命周期
- 作業提交與初始化
- 任務調度與監控,
- 任務運行環境準備
- 任務執行
- 作業完成

如何獲取免費架構學習資料?
資料獲取方式:
關注+轉發后,私信關鍵詞 【資料】即可免費獲取到!
重要的事情說三遍,轉發、轉發、轉發后再發私信,才可以拿到!






關于程式員,除了做專案來提高自身的技術之外,還有一種提升自己的專業技能就是:多!看!書!
所有的知識點都整理在了開源專案添加小助理vx:MAYAZBSP

如何和 HR 聊天,比如談錢等等
首先你面到 HR 了,說明你基本已經成為備選人之一了,這時候 HR 會和你聊很多問題,這些問題都是為了了解你的一些個人情況的,比如說性格啦、反應能力、情商等等,另外大部分公司的 HR 并沒有一票否決權,面試沒有成功多半是有更好的備選人而不是因為 HR 把你卡掉了,
然后說到談錢的一個問題,首先以最少的工資招到需要的人肯定是 HR 的考核之一,所以壓價是很正常的一個事情,并且上家公司的薪資也是一個很重要的參考,一般來說漲薪幅度在 30% 以上是很牛逼的事情了,通常都在 20% 左右,
你的開價一般就是 offer 的上限了,考慮到壓價的情況,你可以在原本期望薪水上上浮 1K 左右,然后可以根據面試的情況來有選擇性的開價,
- 面的不錯,本來想要 16K 的,那么就多要個 1-2K 沒啥問題
- 面的一般,那就報 16 K 吧
- 面的一般或者不大好,但是又很想進這家公司,可以酌情下降 1-2K,這個主要還是看自己
- 不怎么想去這家公司,隨意開價
結語
如果你想去一家不錯的公司,但是目前的硬實力又不到,我覺得還是有必要去努力一下的,技術能力的高低能決定你走多遠,平臺的高低,能決定你的高度,
如果你通過努力成功進入到了心儀的公司,一定不要懈怠放松,職場成長和新技術學習一樣,不進則退,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/232077.html
標籤:其他
