本人是山东普通一本学历,机电专业,15年转行做的andorid开发。作为一个野生程序员,成长历程比较坎坷,开始靠培训机构或者个人自学,初级时就能入职互联网开发,非常困难,初级入职阶段,就能淘汰一大批培训机构的同学,很幸运自己能实现转变,很感激帮助我的同学和第一家时经理收留信任。靠着自己2年多的不断的学习和积累,从一个小白白成长为一个合格工具人,还完成个人薪资翻倍的跳槽。
在第二家公司,也慢慢的技术视野和深度的扩展,能从容应对开发和各种问题。由于公司没有涨薪制度,所以就有了跳槽的计划准备,没想到,这一准备,就是2年时间,靠着总结和积累,跳槽就水到渠成,没有多少运气加成,全是踩坑过河。
所以,对科班人来说,我就是最笨的成长。虽然初期的成长慢了些,但是我有我的坚韧性格,成长多远,多半靠自己,多多灌输自己点励志鸡汤,多多学习别人的长处,多虚心请教别人的心得和学习习惯,成长也是很快的。今年也顺利拿到了百度的offer,附上面经整理!
一面:
§ 算法:
给你n个数,找到最大的m个数
相关知识点: [堆](javascript: void(0))[排序](javascript: void(0))[分治](javascript: void(0))
相关知识点: [堆](javascript: void(0))[排序](javascript: void(0))[分治](javascript: void(0))
相关知识点: [堆](javascript: void(0))[排序](javascript: void(0))[分治](javascript: void(0))
相关知识点: [堆](javascript: void(0))[排序](javascript: void(0))[分治](javascript: void(0))
§ equals和hashcode说一下
§ 线程创建的方法?线程池原理说一下?线程同步的方法?
§ HashMap说一下?
§ 百度贴吧的子帖的实现方法(主帖里面的评论帖,分别从数据库和移动端两个方面来说一下)
§ 如果在一个论坛主界面有很多帖子,并且在主界面上都显示这些帖子的图片(每个帖子9张),怎样避免OOM。(讲了两个思路,一个思路是展示缩略图,点击展示大图,另一个是横向ListView,滑动查看更多,滑出范围对Bitmap进行回收)。
§ 图片压缩过程和缓存相关说一下?LinkedHashMap跟HashMap的差别是什么?底层原理是什么?
二面:
§ 算法:
给你一个字符串,判断是不是标准的ip地址
相关知识点: [字符串](javascript: void(0))
相关知识点: [字符串](javascript: void(0))
相关知识点: [字符串](javascript: void(0))
相关知识点: [字符串](javascript: void(0))
相关知识点: [字符串](javascript: void(0))
相关知识点: [字符串](javascript: void(0))
。(我写完一个之后,说让我把所有的测试用例写出来,发现有几个遗漏掉了,面试官说,让我根据这些测试用例重新再写一下,考察代码扩展优化能力。)
§ 自我介绍,聊聊项目,问我数据来源和数据库设计比较多。(项目上聊的比较多)
§ 举了个数据库联合查询的例子,写个简单的SQL语句。(join)
§ TCP的三次握手说一下?为什么是三次握手?为什么是四次挥手?
§ TCP的滑动窗口原理知道吗?(我说原理不清楚,但是我知道他解决的是什么问题。)
§ hashMap是线程安全吗?如何实现线程安全?
§ Android的持久化存储方式说一下?
§ Android的启动模式和场景说一下
§ Android的ANR知道吗?怎么避免?
§ 内存溢出和内存泄露说一下(中间有提了下Handler)
三面:
§ 你为什么选择换工作?
§ 你组里面的人都怎么样?
§ 你怎么解决项目中的难点?
§ 你有工作中遇到过哪些比较麻烦的地方?
§ 你平时怎么学习的啊?
§ 你除去学习之外都看什么书?
下面是我花了将近一年的时间整理的一份面试题库。这些面试题,包括我本人自己去面试遇到的,还有其他人员去面试遇到的,我都统一的整理了一下,希望对大家有用。作者不易,如有错误望见谅。
1.Activity启动模式
2.Activity的启动过程
3.进程通讯
4.Android Binder之应用层总结与分析
5.进程保活方法
6.从源码了解handler looper ,messageQueue思路
7.handler如何实现延时发消息postdelay()
8.Android中为什么主线程不会因为Looper.loop()里的死循环卡死?
9.RxJava原理及如何封装使用
10.okhttp源码分析
11.retrofit源码分析
…
由于篇幅有限,只能分享部分面试题,更多面试题及答案可以我的点击这里免费下载获取!阅读下载哦~无偿分享给大家,算是一个感恩回馈吧
12.LeakCanary核心原理源码浅析
13.LruCache 使用及原理
14.ARouter原理
15.注解框架实现原理
16.Android 如何编写基于编译时注解的项目
17.RxJava2+Retrofit2+OkHttp3的基础、封装和项目中的使用
18.Rxjava2.0+Retrofit+Okhttp(封装使用)+MVP框架搭建
19.Android 插件化和热修复知识梳理
20.Android开发中比较常见的内存泄漏问题及解决办法
21.如何检测和定位Android内存泄漏
22.图片占据的内存算法
23.为什么图片需要用软引用,MVP模式中的view接口用弱引用
24.基于DataBinding与LiveData的MVVM实践
25.App稳定性优化
26.App启动速度优化
27.App内存优化
28.App绘制优化
29.App瘦身
30.网络优化
31.App电量优化
32.安卓的安全优化
33.为什么WebView加载会慢呢?
34.如何优化自定义View
1.HashMap
2.ArrayList
3.LinkedList
4.Hashset源码分析
5.内存模型
6.垃圾回收算法(JVM)
7.垃圾回收机制和调用 System.gc()的区别?
8.类加载过程
9.反射
10.多线程和线程池
11.创建多线程方式、线程池工作原理
12.设计模式(六大基本原则、项目中常用的设计模式、手写单例等)
13.断点续传
14.Java 四大引用
15.Java 的泛型
16.接口、抽象类的区别
17.从 java 容器类的设计讨论抽象类和接口的应用
由于篇幅有限,只能分享部分面试题,更多面试题及答案点击这里免费下载获取!阅读下载哦~无偿分享给大家,算是一个感恩回馈吧
1.常用的数据结构有哪些?
2.数组 (1).如何在一个1到100的整数数组中找到丢失的数字 (2).如何在给定的整数数组中找到重复的数字? (小米) (3).如何在未排序整数数组中找到最大值和最小值?(字节跳动) (4).在Java中如何从给定数组中删除多重复制? (5).大数相加(今日头条)
3.链表 (1).那查询第一个跟倒数第二个呢?(这就不一样了,第一个直接给了头结点,倒数第二个需要从倒数第一个开始查询,走两步) (腾讯) (2).arrayList底层原理 (滴滴) (3).如何在一次遍历中找到单个链表的中值?(中国平安) (4).如何证明给定的链表是否包含循环?如何找到循环的头节点?(优酷) (5).两个有交叉的单链表,求交叉点 (华为) (6).如何得到单链表的长度?(360) (7).如何在不使用递归的情况下逆转单链表?(小米/美团) (8).怎么判断链表有环? (滴滴)
4.队列&堆栈 (1).如何使用栈实现队列的功能(广州荔枝FM) (2).两个栈实现一个队列(蘑菇街) (3).两个队列实现一个栈 (腾讯) (4).对比一下队列和栈,以及它们底部实现 (腾讯)
5.二叉树 (1).如何在给定的二叉树中执行先序遍历?(百度) (2).如何实现后序遍历算法?(百度) (3).如何在给定数组中执行二分法搜索?(苏宁) (4).已知前序遍历为{1,2,4,7,3,5,6,8},中序遍历为{4,7,2,1,5,3,8,6},它的二叉树是怎么样的? (5).输入两棵二叉树 A 和 B,判断 B 是不是 A 的子结构。 (爱奇艺) (6).请实现两个函数,分别用来序列化二叉树和反序列化二叉树(YY) (7).平衡二叉树和红黑树的区别?(字节跳动) (8).什么是平衡二叉树,它有什么特征 (美团) (9).B 树,B+树
6.HashMap (1).HashMap的底层原理是什么?线程安全么? (百度) (2).HashMap中put是如何实现的? (滴滴) (3).谈一下hashMap中什么时候需要进行扩容,扩容resize()又是如何实现的? (4).什么是哈希碰撞?怎么解决? (滴滴) (5).HashMap和HashTable的区别 (小米) (6).HashMap中什么时候需要进行扩容,扩容resize()是如何实现的? (滴滴) (7).hashmap concurrenthashmap原理 (美团) (8).arraylist和hashmap的区别,为什么取数快?(字节跳动)
7.图 (1).旋转输出矩阵 (2).给定一个矩阵 int matrixA[m][n],每行每列都是增序的,实现一个算法去寻找矩阵中的某个元素 element. 搜狗
8.排序算法有哪些?
9.查找算法
10.串
1.HTTP协议
2.TCP/IP协议
3.TCP的三次握手与四次挥手理解及面试题
4.网页中输入url,到渲染整个界面的整个过程,以及中间用了什么协议?
5.TCP和UDP的区别?
6.HTTP的几种请求方法具体介绍
7.HTTP请求和响应报文的格式,以及常用状态码
8.一个 TCP 连接上面能发多少个 HTTP 请求
由于篇幅有限,只能分享部分面试题,更多面试题及答案点击这里免费下载获取!阅读下载哦~无偿分享给大家,算是一个感恩回馈吧
不说废话,只说关键点:
(1)要有技术总结。技术点总结、遇到的坑总结、大技术点专题总结(笔记+代码示例),整理成笔记,时常翻看(写博客也需要用笔记先总结好)
(2)有笔记习惯。记录技术,异常,新技术,复盘总结,日报总结,学习计划,好的点子等,一切认为可总结的技术点,都做成笔记。后期翻看时,可以增加自己的思考角度维度,为日后做核心岗位做准备。我这个习惯已经保持了2年多,当前能完成跳槽,这个习惯给了我最大的支持,让我水到渠成。
(3)看源码学习。好奇心多一些,当成享受,时间长了,你就自然而然的厉害了。
(4)如果对公司有期望,做事要负责实干,领导的刁难或严苛,要学会皮实应对,说不定是扶持你上位的考验