|
| 1 | +> 本文由 [简悦 SimpRead](http://ksria.com/simpread/) 转码, 原文地址 [www.nowcoder.com](https://www.nowcoder.com/discuss/637535) |
| 2 | +
|
| 3 | +> 战况(时间排序) 最右二面挂 猿辅导一面挂 伴鱼 offer(两轮技术 + 一轮 HR) 顺丰二面挂 百度二面挂 |
| 4 | +
|
| 5 | +* 战况(时间[排序](https://www.nowcoder.com/jump/super-jump/word?word=%E6%8E%92%E5%BA%8F)) |
| 6 | + |
| 7 | + * [最右](https://www.nowcoder.com/jump/super-jump/word?word=%E6%9C%80%E5%8F%B3)二面挂 |
| 8 | + |
| 9 | + * [猿辅导](https://www.nowcoder.com/jump/super-jump/word?word=%E7%8C%BF%E8%BE%85%E5%AF%BC)一面挂 |
| 10 | + |
| 11 | + * 伴鱼 offer(两轮技术 + 一轮 HR) |
| 12 | + |
| 13 | + * 顺丰二面挂 |
| 14 | + |
| 15 | + * [百度](https://www.nowcoder.com/jump/super-jump/word?word=%E7%99%BE%E5%BA%A6)二面挂 |
| 16 | + |
| 17 | + * [微博](https://www.nowcoder.com/jump/super-jump/word?word=%E5%BE%AE%E5%8D%9A)一面挂(一面就问意向薪资,面的还行,要多了没有后续了) |
| 18 | + |
| 19 | + * 老虎证券 offer(两轮技术 + 一轮 HR) |
| 20 | + |
| 21 | + * [滴滴](https://www.nowcoder.com/jump/super-jump/word?word=%E6%BB%B4%E6%BB%B4)一面挂 |
| 22 | + |
| 23 | + * [快手](https://www.nowcoder.com/jump/super-jump/word?word=%E5%BF%AB%E6%89%8B)简历挂 |
| 24 | + |
| 25 | + * 字节 offer(三轮技术 + 一轮 HR) |
| 26 | + |
| 27 | + * [美团](https://www.nowcoder.com/jump/super-jump/word?word=%E7%BE%8E%E5%9B%A2) HR 面(三轮技术) |
| 28 | + |
| 29 | + * [腾讯](https://www.nowcoder.com/jump/super-jump/word?word=%E8%85%BE%E8%AE%AF) HR 面(三轮技术) |
| 30 | + |
| 31 | +* 非技术准备方面 |
| 32 | + |
| 33 | + * 离职原因方面 |
| 34 | + |
| 35 | + 其实大家换工作无非钱少了 / 环境不好 / 没成长三种原因,但是面试在讲离职原因的时候一定不要过于实诚,请尽量往个人发展这个方向上靠拢,切忌一定不要说现任公司的坏话,尤其是跳槽频繁或者像我这种第一份工作不满两年的,一定要想好自己的离职理由,我有几家公司明显技术答的还行,但是因为离职理由挂掉的。 |
| 36 | + |
| 37 | + * 简历投递顺序方面 |
| 38 | + |
| 39 | + 如果你对自己很有信心的话,可以直接投你的意向公司,如果信心不够强烈建议跟我一样先面几家体量不那么大的公司涨涨经验看看现在外面的行情,然后再投自己中意的公司。 |
| 40 | + |
| 41 | + * 心态准备方面 |
| 42 | + |
| 43 | + 既然准备了要离职,就不要被任何其他事物影响心态,心态真的很重要。刚开始面试的时候我真的是处处碰壁,面一家挂一家,后来在一家面试过程中被面试官疯狂嘲讽,面完之后怀疑自我,是不是自己真的太菜了找不到工作。后来也辛亏隔天有一家公司给我发了 offer,让我明白了不是自己的问题。工作本身就是双向选择,一家不行再换一家,总有合适的,千万不要因为别人的一句话就全盘否定自己,一定要自信。 |
| 44 | + |
| 45 | +* 技术准备方面 |
| 46 | + |
| 47 | + 刚开始面试的时候是准备把面试过的所有家都写详细的题目出来的,后来发现写了[面经](https://www.nowcoder.com/jump/super-jump/word?word=%E9%9D%A2%E7%BB%8F)发在[牛客](https://www.nowcoder.com/jump/super-jump/word?word=%E7%89%9B%E5%AE%A2)的都挂了,也不知道是什么奇怪的玄学,后来就没发过了,不过其实面过来面过去就那些问题,就像下边这样整体总结一下吧。 |
| 48 | + |
| 49 | + |
| 50 | + |
| 51 | + # Java |
| 52 | + |
| 53 | + ## 怎么判断一个字符串的字符个数,比如说中文 |
| 54 | + |
| 55 | + 直接取 String.length()、或者 String.toCharArray(), String.getByts 不太行,和编码格式后患。 |
| 56 | + |
| 57 | + |
| 58 | + |
| 59 | + ## Java 的异常机制,为什么这么设计,什么时候用什么 |
| 60 | + |
| 61 | + Throw |
| 62 | + |
| 63 | + ## HashMap |
| 64 | + |
| 65 | + * 解决 hash 冲突的方案有哪几种 |
| 66 | + * 1.7 和 1.8 有什么区别([链表](https://www.nowcoder.com/jump/super-jump/word?word=%E9%93%BE%E8%A1%A8)头插尾插方面) |
| 67 | + * hashmap 高并发场景会怎样 |
| 68 | + * 高并发[链表](https://www.nowcoder.com/jump/super-jump/word?word=%E9%93%BE%E8%A1%A8)成环会有什么问题 |
| 69 | + * hashmap 扩容时到底干了什么(位运算过程) |
| 70 | + * concurrentHashMap 原理 |
| 71 | + |
| 72 | + |
| 73 | + |
| 74 | + ## String,StringBuilder,StringBuffer |
| 75 | + |
| 76 | + * ArrayList 多线程下会有什么问题 |
| 77 | + |
| 78 | + * 内部类持有外部类引用的原理是什么 |
| 79 | + |
| 80 | + * volatile 有什么用,原理是什么 |
| 81 | + |
| 82 | + ## 为什么会有 StackOverflow,stack 的大小是多少 |
| 83 | + |
| 84 | + StackOverflow 是 JVM 规定的一种 error:程序申请栈的大小超过了最大限制。如果将 JVM 的栈最大值甚至的很大,可能出现超过最大可用内存的问题,此时就会出现OOM问题 |
| 85 | + |
| 86 | + 在 Java 中 stack 的默认的大小时 1M,可以通过 JVM 参数调整, Android 对此进行了优化,大约是 64K |
| 87 | + |
| 88 | + * 虚拟机 |
| 89 | + |
| 90 | + * Java 虚拟机和 Android 虚拟机有什么区别 |
| 91 | + |
| 92 | + * Android 两种虚拟机有什么区别 |
| 93 | + |
| 94 | + * 类加载过程 |
| 95 | + |
| 96 | + * 内存模型 |
| 97 | + |
| 98 | + * 四种引用类型 |
| 99 | + |
| 100 | + * class 文件格式 |
| 101 | + |
| 102 | + * synchronized 底层实现原理 |
| 103 | + |
| 104 | + * synchronized 放在普通方法和静态方法上有什么区别 |
| 105 | + |
| 106 | + * synchronized 的锁实际是保存在哪里的(对象头) |
| 107 | + |
| 108 | + * 双亲委派机制,为什么要用双亲委派机制,如何打破双亲委派机制 |
| 109 | + |
| 110 | + * 内存收集整理的[算法](https://www.nowcoder.com/jump/super-jump/word?word=%E7%AE%97%E6%B3%95) |
| 111 | + |
| 112 | + * Android |
| 113 | + |
| 114 | + * Activity |
| 115 | + |
| 116 | + * Activity 的生命周期 |
| 117 | + |
| 118 | + * dialog 会不会影响 Activity 生命周期,为什么 |
| 119 | + |
| 120 | + * Activity 的启动模式(还会伴有场景让你说这种场景选哪个合适) |
| 121 | + |
| 122 | + * Activity 任务栈以及 taskaffinity |
| 123 | + |
| 124 | + * Service |
| 125 | + |
| 126 | + * Service 存在的意义是什么 |
| 127 | + |
| 128 | + * startService 和 bindService 的生命周期 |
| 129 | + |
| 130 | + * startService 和 bindService 的区别 |
| 131 | + |
| 132 | + * startService 和 bindService 分别适合应用在什么场景 |
| 133 | + |
| 134 | + * Service 可以执行耗时操作吗 |
| 135 | + |
| 136 | + * IntentService 和 Service 的区别 |
| 137 | + |
| 138 | + * Service 和线程都可以用来执行后台任务,为什么选 Service 不选线程,明明线程用起来更简单 |
| 139 | + |
| 140 | + * broadcastreceiver |
| 141 | + |
| 142 | + * 广播的原理是什么 |
| 143 | + |
| 144 | + * View 的绘制流程 |
| 145 | + |
| 146 | + * 详细讲一下 View 的绘制流程有哪些 |
| 147 | + |
| 148 | + * View 的第一次绘制是怎么调到的 |
| 149 | + |
| 150 | + * View 的后续绘制是怎么调用的 |
| 151 | + |
| 152 | + * View 的 onMeasure,onLayout,onDraw 都分别用来干什么 |
| 153 | + |
| 154 | + * 除了上面三个,还有哪些关键的方法 |
| 155 | + |
| 156 | + * invalidate 的原理 |
| 157 | + |
| 158 | + * invalidate 和 requestlayout 的区别 |
| 159 | + |
| 160 | + * requestlayout 的作用范围是多大 |
| 161 | + |
| 162 | + * 一个 View 被添加后第一个回调的方法是哪个(onAttacthToWindow) |
| 163 | + |
| 164 | + * 为什么 View.post 能拿到 view 的宽高 |
| 165 | + |
| 166 | + * 讲一些字节做过的自定义 VIew 的例子 |
| 167 | + |
| 168 | + * 触摸事件分发 |
| 169 | + |
| 170 | + * 讲一下 Android 事件分发的流程 |
| 171 | + |
| 172 | + * 怎么处理滑动冲突 |
| 173 | + |
| 174 | + * 怎么判断手势 |
| 175 | + |
| 176 | + * 讲一些自己做过的处理滑动冲突的原理 |
| 177 | + |
| 178 | + * 事件分发 |
| 179 | + |
| 180 | + * handler 这套机制的原理 |
| 181 | + |
| 182 | + * IdleHandler 是什么 |
| 183 | + |
| 184 | + * handler 的 postDelay 怎么实现的 |
| 185 | + |
| 186 | + https://juejin.cn/post/6896495861954510861#heading-7 |
| 187 | + |
| 188 | + * Message 有个缓存池,缓存池大小是多少知道吗 |
| 189 | + |
| 190 | + * MessageQueue 的中没有消息的时候为什么不会 ANR |
| 191 | + |
| 192 | + * 知道 epoll 的底层原理吗 |
| 193 | + |
| 194 | + epoll 是 Linux 实现多路 IO 的一种实现方式, |
| 195 | + |
| 196 | + * epoll 是阻塞的吗 |
| 197 | + |
| 198 | + *  |
| 199 | + |
| 200 | + * ANR |
| 201 | + |
| 202 | + * ANR 是什么 |
| 203 | + |
| 204 | + * ANR 的原理 |
| 205 | + |
| 206 | + * 什么情况下会发生 ANR |
| 207 | + |
| 208 | + * 如何检测是否发生了 ANR |
| 209 | + |
| 210 | + * SharedPreference |
| 211 | + |
| 212 | + * SharedPreference 原理 |
| 213 | + |
| 214 | + * SharedPreference 的优化 |
| 215 | + |
| 216 | + * SharedPreference 的 commit 和 apply 区别 |
| 217 | + |
| 218 | + * 什么情况下会选择用 SharedPreference |
| 219 | + |
| 220 | + * 序列化 |
| 221 | + |
| 222 | + * Serlizeable 和 Parceable 的区别 |
| 223 | + |
| 224 | + * 什么情况下选择用哪个,为什么 |
| 225 | + |
| 226 | + * 有没有了解过别的序列化方法 |
| 227 | + |
| 228 | + * RecyclerView |
| 229 | + |
| 230 | + * RecyclerView 的缓存机制 |
| 231 | + |
| 232 | + * RecyclerView 和 ListView 对比 |
| 233 | + |
| 234 | + * Recycler 是怎么进行回收和复用的 |
| 235 | + |
| 236 | + * LayoutManager 怎么进行布局的 |
| 237 | + |
| 238 | + * 内存泄漏 |
| 239 | + |
| 240 | + * 内存泄漏的常见场景 |
| 241 | + |
| 242 | + * 怎么检查内存泄漏 |
| 243 | + |
| 244 | + * Binder |
| 245 | + |
| 246 | + * Binder 原理 |
| 247 | + |
| 248 | + * Binder 比起其他跨进程的通信方式好在哪 |
| 249 | + |
| 250 | + * 网络 |
| 251 | + |
| 252 | + * HTTP 报文格式 |
| 253 | + |
| 254 | + * HTTP 在网络体系架构中的意义是什么 |
| 255 | + |
| 256 | + * HTTPS 和 HTTP 的区别 |
| 257 | + |
| 258 | + * 对称加密和非对称加密 |
| 259 | + |
| 260 | + * TLS 四次握手的过程 |
| 261 | + |
| 262 | + * CA 是干什么的 |
| 263 | + |
| 264 | + * 校验证书的详细过程 |
| 265 | + |
| 266 | + * HTTPS 一定是安全的吗 |
| 267 | + |
| 268 | + * TCP 和 UDP 的区别(高频) |
| 269 | + |
| 270 | + * HTTP1.0,1.1,2.0 的区别 |
| 271 | + |
| 272 | + * 有没有实际了解过 HTTP2.0 到底比 1.1 快了多少 |
| 273 | + |
| 274 | + * 详细解释 “Keep-Alive” 有什么用 |
| 275 | + |
| 276 | + * UDP 为什么比 TCP 快(存在误导,UDP 不一定比 TCP 快) |
| 277 | + |
| 278 | + * UDP 可以进行广播为什么 TCP 不行 |
| 279 | + |
| 280 | + * 为什么要三次握手,四次挥手 |
| 281 | + |
| 282 | + * 为什么握手仅需要三次而回收需要四次 |
| 283 | + |
| 284 | + * HTTP 是基于什么协议的(一般来说是 TCP, 可以借此引出 QUIC,KCP 等协议进行进一步的探讨) |
| 285 | + |
| 286 | + * 操作系统 |
| 287 | + |
| 288 | + * 线程间通信方式 |
| 289 | + |
| 290 | + * 线程的几种状态 |
| 291 | + |
| 292 | + * 进程间通信方式 |
| 293 | + |
| 294 | + * 线程和进程的区别 |
| 295 | + |
| 296 | + * 设计模式 |
| 297 | + |
| 298 | + 设计模式没有必要全都看,重要的是你会的几种设计模式他们的优点是什么,缺点是什么,在哪些常见的地方用到了他们,要能够举一反三,例举几个我面试时常说的。 |
| 299 | + |
| 300 | + * 单例——单例一定要特别熟,特别高频,尤其是 DCL 为什么这么写,synchronized 为什么那么加,有什么讲究,volatile 在这个地方起到了什么作用,不加会导致什么问题。静态内部类的单例怎么能够保证线程安全。等等。 |
| 301 | + |
| 302 | + * Builder——常见,知道什么时候用就行了 |
| 303 | + |
| 304 | + * 责任链——要能扩展到 Android 的事件分发,okhttp 的拦截链等。 |
| 305 | + |
| 306 | + * 观察者模式——要能知道 Android 中哪些地方用到了观察者,什么情况下使用。比如广播机制就使用的是观察者 |
| 307 | + |
| 308 | + * 享元模式——要知道享元模式是为了避免重复创建对象而导致的开销,Message,String,线程池都是这样的设计思想。 |
| 309 | + |
| 310 | + * Adapter——要能想到 ListView 和 RecyclerView,以及为什么他们设计的时候要用 Adapter |
| 311 | + |
| 312 | + * 代理模式——静态代理,动态代理 |
| 313 | + |
| 314 | + * [算法](https://www.nowcoder.com/jump/super-jump/word?word=%E7%AE%97%E6%B3%95)(手撸代码) |
| 315 | + |
| 316 | + 就[算法](https://www.nowcoder.com/jump/super-jump/word?word=%E7%AE%97%E6%B3%95)来说,其实大部分公司(除了字节和[腾讯](https://www.nowcoder.com/jump/super-jump/word?word=%E8%85%BE%E8%AE%AF))问的都不是很难,一般都集中在数组和[链表](https://www.nowcoder.com/jump/super-jump/word?word=%E9%93%BE%E8%A1%A8)上,基本就是[剑指 offer](https://www.nowcoder.com/jump/super-jump/word?word=%E5%89%91%E6%8C%87offer) 难度甚至直接就是原题。 |
| 317 | + |
| 318 | + * 移动零——一个数组有 0 和其他数,不更改原本其他非 0 数字的顺序,把 0 都移到数组最末位([猿辅导](https://www.nowcoder.com/jump/super-jump/word?word=%E7%8C%BF%E8%BE%85%E5%AF%BC)) |
| 319 | + |
| 320 | + * 手写栈(伴鱼) |
| 321 | + |
| 322 | + * [数组中只出现一次的数字](https://www.nowcoder.com/jump/super-jump/word?word=%E6%95%B0%E7%BB%84%E4%B8%AD%E5%8F%AA%E5%87%BA%E7%8E%B0%E4%B8%80%E6%AC%A1%E7%9A%84%E6%95%B0%E5%AD%97)——剑指原题(伴鱼) |
| 323 | + |
| 324 | + * (顺丰,[腾讯](https://www.nowcoder.com/jump/super-jump/word?word=%E8%85%BE%E8%AE%AF),[美团](https://www.nowcoder.com/jump/super-jump/word?word=%E7%BE%8E%E5%9B%A2)) |
| 325 | + |
| 326 | + * ([腾讯](https://www.nowcoder.com/jump/super-jump/word?word=%E8%85%BE%E8%AE%AF)) |
| 327 | + |
| 328 | + * ([腾讯](https://www.nowcoder.com/jump/super-jump/word?word=%E8%85%BE%E8%AE%AF)) |
| 329 | + |
| 330 | + * 一道贪心——题目太长了且没有原题([腾讯](https://www.nowcoder.com/jump/super-jump/word?word=%E8%85%BE%E8%AE%AF)) |
| 331 | + |
| 332 | + * ([百度](https://www.nowcoder.com/jump/super-jump/word?word=%E7%99%BE%E5%BA%A6)) |
| 333 | + |
| 334 | + * (老虎证券) |
| 335 | + |
| 336 | + * 插入 5([https://www.lintcode.com/problem/188/)(](https://www.lintcode.com/problem/188/)()老虎证券) |
| 337 | + |
| 338 | + * ([美团](https://www.nowcoder.com/jump/super-jump/word?word=%E7%BE%8E%E5%9B%A2)) |
| 339 | + |
| 340 | + * 手写 DCL 单例(字节) |
| 341 | + |
| 342 | + * (字节) |
| 343 | + |
| 344 | + * 最短子数组长度——滑动窗口(字节) |
| 345 | + |
| 346 | + * 手写观察者模式(字节) |
| 347 | + |
| 348 | + * (字节) |
| 349 | + |
| 350 | + * 获取一个 ViewGroup 的最深深度([美团](https://www.nowcoder.com/jump/super-jump/word?word=%E7%BE%8E%E5%9B%A2)) |
| 351 | + |
| 352 | + * 设计题 |
| 353 | + |
| 354 | + 设计题这个部分其实大部分并没有标准答案,更多的是看以你的知识量能够想到什么比较好的解决方案。 |
| 355 | + |
| 356 | + * 设计进程安全的 SharedPreference(字节,[腾讯](https://www.nowcoder.com/jump/super-jump/word?word=%E8%85%BE%E8%AE%AF)) |
| 357 | + |
| 358 | + * 设计一个 gif 加载框架([微博](https://www.nowcoder.com/jump/super-jump/word?word=%E5%BE%AE%E5%8D%9A)) |
| 359 | + |
| 360 | + * 一个进程只有读操作,一个进程只有写操作,你怎么设计([微博](https://www.nowcoder.com/jump/super-jump/word?word=%E5%BE%AE%E5%8D%9A)) |
| 361 | + |
| 362 | + * 如果一个 APP 需要有闲时加载任务的能力,你怎么设计([美团](https://www.nowcoder.com/jump/super-jump/word?word=%E7%BE%8E%E5%9B%A2)) |
| 363 | + |
| 364 | + * 让你设计一个流式标签布局你怎么做,有哪些要考虑的点([最右](https://www.nowcoder.com/jump/super-jump/word?word=%E6%9C%80%E5%8F%B3)) |
| 365 | + |
| 366 | + * 设计一个下拉刷新的 RecyclerView 你有几种方法([美团](https://www.nowcoder.com/jump/super-jump/word?word=%E7%BE%8E%E5%9B%A2)) |
| 367 | + |
| 368 | + * APP 使用经常会有弱网环境,怎么确保 APP 数据的即使同步更新以及正确性(顺丰) |
| 369 | + |
| 370 | + * 让你设计一个 push 的框架,你会怎么设计,考虑到哪些问题([百度](https://www.nowcoder.com/jump/super-jump/word?word=%E7%99%BE%E5%BA%A6)) |
| 371 | + |
| 372 | + * 设计一个检测内存泄漏的框架([腾讯](https://www.nowcoder.com/jump/super-jump/word?word=%E8%85%BE%E8%AE%AF)) |
| 373 | + |
| 374 | + * 设计一个事件总线([最右](https://www.nowcoder.com/jump/super-jump/word?word=%E6%9C%80%E5%8F%B3)) |
| 375 | + |
| 376 | + * [项目](https://www.nowcoder.com/jump/super-jump/word?word=%E9%A1%B9%E7%9B%AE) |
| 377 | + |
| 378 | + 在[项目](https://www.nowcoder.com/jump/super-jump/word?word=%E9%A1%B9%E7%9B%AE)上,一定要能做到融汇贯通,不仅从技术上也要从业务上。比如你做过的一个需求,为什么要做这个需求,这个需求的背景是什么,这个需求上线后带来了什么影响或者有哪些收益,虽然你是个技术,但是你能够知道这写得话肯定是更好的。其次在技术细节上,要能知道为什么要这样技术选项,这么做的好处是什么,以及能够横向纵向拓展。比如说我的[项目](https://www.nowcoder.com/jump/super-jump/word?word=%E9%A1%B9%E7%9B%AE)中有一个地方用 JobService 实现了定时任务,那么可以横向拓展的点就有,Android 中实现定时任务的方式都有哪些,他们都有哪些好处坏处,你的这个场景为什么要选 JobService,JobService 和普通 Service 的区别是什么。纵向扩展的话就有,JobService 的原理是什么,JobService 在参数配置上的一些细节,JobService 是不是会严格按照你配置的时间运行。这些都是可以扩展出来的,所以当你在对[项目](https://www.nowcoder.com/jump/super-jump/word?word=%E9%A1%B9%E7%9B%AE)复盘的时候,一定不要只盯着你做的那一部分,还要把自己做的部分横纵拓展一下,这样才能做到无懈可击。除此之外,良好的表达能力也是非常重要的一环,如果不觉得麻烦的话可以在复盘[项目](https://www.nowcoder.com/jump/super-jump/word?word=%E9%A1%B9%E7%9B%AE)的时候把自己做了什么,为什么这么做打个草稿,自己看自己的逻辑以及表达是否通顺,以此来做调整。 |
| 379 | + |
0 commit comments