2020 年中总结之 ---- 怎么挤进一线大厂?非软文!(1),Android 面试题整理
4.TCP 为什么三次握手不是两次握手,为什么两次握手不安全
5.为什么 TCP 是可靠的,UDP 早不可靠的?为什么 UDP 比 TCP 快?
6.http 协议
....
10.https
掌握了上面这些网络知识,能通过面试吗?
很遗憾,并不一定能。
举个例子,大厂的网络编程面试题可能如下:
网络编程相关
TCP 三次握手的时间是多少 如何处理数据传输错误 TCP 的可靠传输机制是什么 TCP 传输的一个报文段有多大 说说滑动窗口和拥塞控制
深度大概如上所述(再深我也不会了..),如果单从网上的面试题或者零散资料去查去看,多数情况是回答不上的。这就需要有两手准备,通过书籍或者官方文档,系统性的学习 TCP / UDP / HTTP ,文章末尾我会有一些书籍文档推荐。
下面举 java 相关的??
java
java 涵盖的知识点一般有: 线程与并发、JVM、集合
集合
HashMap 有哪些高效的运算,如何扩容
答:取 key 的 hashCode 值、高位运算、取模运算 当 length 总是 2 的 n 次方时,h& (length-1)运算等价于对 length 取模,也就是 h%length,但是 &比 %具有更高的效率。可以参考美团的:Java 8 系列之重新认识 HashMap
线程
Synchronized 和 ReentrantLock 还有生产者消费者也是作为大厂高频的面试题出现,对于 Synchronized 他们问的会更深沉一些。不光要会用 Api , 也需要实现的机制是什么。
Synchronized 的 jvm 实现机制是什么 锁是什么,存储在哪里,包含哪些属性 wait 和 sleep 有什么不同,wait 和 notify 的机制是什么
ReentrantLock 的原理 (CAS + AQS) 公平锁和非公平锁的实现? AQS 核心功能原理分析,内部的数据结构是什么?
可能会有人觉得这些应该是后端的事情,客户端很少会涉及多线程,即使要用,看一下 Api 文档能用就行。
实际上当你了解学习了 ReentrantLock 、AQS ,它们很可能会在后续的知识点产生影响,并且帮助你建立网状知识结构。
再说一个很实际的例子,线程池也作为高频的面试题,线程池中有阻塞队列例如 LinkedBlockingQueue , 重要的是 LinkedBlockingQueue 的实现机制就有 ReentrantLock ,而 ReentrantLock 又依赖 AQS。
这就呼应了上面我举的为什么这道难题他能答的原因 1. 这道题他做过 2. 做过相似的题型。
所以在刷面试题或者看书籍文档的时候,不妨换位考虑一下: 如果我是面试官,我会出什么样的题目看起来比较有深度?
---- 谢邀,人在美国刚下飞机
算法
链表中环的检测 ,没有做过或者了解相似题型的人,是很难能够写出答案的
上面说的这句话是很有事实依据的,前 Google 工程师王争在他的课程里也有提到:
对于算法,多写多练,总结复盘,除非要你去做推荐算法或者人工 AI 大数据计算,否则 Android 面试官不会为难你,只会考察一下算法的基本功,代码编程能力。
我总结了下,常规的算法数据结构大概有以下 5 种,你可以选择一招鲜吃遍天,把它们死啃下来。当然,当你开始入门并上手算法题,也会从中找到乐趣和成就感。(这道题我只要 O(1)时间复杂度!不需要额外空间!给你们看看我的题解)
数组与矩阵
链表
栈和队列
字符串
位运算
哪有什么天生如此 只是我们天天坚持. [图片上传中...(image-31d0e0-1598534455035-1)]
书籍/文章推荐
网络相关
《计算机网络》(第七版) -- 谢仁希 这本书可以看 第五章-运输层, 系统性的学习 TCP/UDP 协议
【领取】
附加参考书籍:
计算机网络(原书第 7 版) : 自顶向下方法 图解 TCP/IP(第 5 版) 图解 HTTP
java
以 JVM、线程与并发、集合 为大纲进行知识拓展。
JVM: 《深入理解 Java 虚拟机》-- 周志明 或者阅读我的专栏: 《深入理解Java虚拟机》 , 大厂问的 JVM 相关问题基本能覆盖到。
线程与并发: 《Java 并发编程的艺术》-- 方腾飞 / 魏鹏 / 程晓明
集合 ArrayList、LinkedList、CopyOnWriteArrayList HashMap、LinkedHashMap、ConcurrentHashMap SparseArray、ArrayMap
附加参考书籍: 实战 Java 高并发程序设计(第 2 版)
Android
Android 涵盖点比较广,建议以官方文档为主 : Android 开发者指南 ,官方文档很详细并且几乎覆盖所有的 Api ,如果你想学习 Jetpack, 也建议从官方文档入手 Android Jetpack ,比大多数博客更权威,是一种不错的知识和资源获取途径。
可以把 Android 分为以下几个大纲
Android 基础 Api : RecyclerView、Handler、Jetpack...
Android 系统源码 : Activity 源码、View 绘制机制、事件分发机制、Window 机制、AMS、WMS、PMS、Binder。
Android 第三方库 : Okhttp、Glide、EventBus、ARoute 等
Android 性能优化 : 卡顿、内存、启动、崩溃、安装包、ANR...
按照上面大纲展开拓扑结构学习,最终形成知识大网。当然每个知识点都需要深入探索
Android 系统源码 可以尝试看看我的 Android 源码专栏 《Android 源码分析系列》,不仅有源码分析,而且有关联有总结,容易形成网状知识结构。
Android 性能优化 直上云霄的 Android 开发高手课, 作为应用的性能优化可以说是一门相当优秀且卓越的课程。
附加参考书籍: 《Android 开发艺术探索》 《深入理解 ANDROID 卷 3》 《Android 从入门到精通》![](https://upload-images.jianshu.io/upload_images/24334488-ded66061839d8b49.png?imageMogr2/auto-orient/strip%7CimageView
2/2/w/1240)
【领取】
算法
算法没有什么窍门,多学多练多总结
训练阶段可以按照
《算法 第 4 版》 学习数据结构和算法思想 , 或者按照极客时间上王争的 数据结构与算法之美 课程来学。
预备了理论知识后开始编码上手, 先按照 《剑指 offer》 这本书的算法题目在牛客网上刷题 牛客网--剑指 Offer
可以说当你把《剑指 offer》算法题都刷完了,算法这一关的通过率可以达到 60%。如果想要有更高的造诣,那就按照 Leetcode 题解 - 目录上整理的题目大纲以及解题思路,更全面系统的提升算法能力。到达这一步,算法面试的通过率可以达到 90% 。
写在最后
这篇博客主要在于总结和复盘,所以没有涵盖太多的面试题。
更多的是提供大厂技术面试的一个方向,他们如何考察面试者的水平。可以说大厂会系统性的筛选面试者,一二轮面试通过 java、Android 的技术问题了解面试者的基础能力,能到达第三轮面试说明基础能力合格,再通过项目问题考察面试者的项目/合作能力,当然如果是在线面试会有可能让面试者写编程题或者算法题。
对于面试者来说,能做的就是提升面试通过率,系统性学习和总结。
评论