野生程序员的成长经历
本人是山东普通一本学历,机电专业,15年转行做的andorid开发。作为一个野生程序员,成长历程比较坎坷,开始靠培训机构或者个人自学,初级时就能入职互联网开发,非常困难,初级入职阶段,就能淘汰一大批培训机构的同学,很幸运自己能实现转变,很感激帮助我的同学和第一家时经理收留信任。靠着自己2年多的不断的学习和积累,从一个小白白成长为一个合格工具人,还完成个人薪资翻倍的跳槽。
在第二家公司,也慢慢的技术视野和深度的扩展,能从容应对开发和各种问题。由于公司没有涨薪制度,所以就有了跳槽的计划准备,没想到,这一准备,就是2年时间,靠着总结和积累,跳槽就水到渠成,没有多少运气加成,全是踩坑过河。
所以,对科班人来说,我就是最笨的成长。虽然初期的成长慢了些,但是我有我的坚韧性格,成长多远,多半靠自己,多多灌输自己点励志鸡汤,多多学习别人的长处,多虚心请教别人的心得和学习习惯,成长也是很快的。今年也顺利拿到了百度的offer,附上面经整理!
百度安卓工程师社招面经(一面、二面、三面已拿offer)
一面:
§ 算法:
相关知识点: [堆](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的差别是什么?底层原理是什么?
二面:
§ 算法:
相关知识点: [字符串](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)
三面:
§ 你为什么选择换工作?
§ 你组里面的人都怎么样?
§ 你怎么解决项目中的难点?
§ 你有工作中遇到过哪些比较麻烦的地方?
§ 你平时怎么学习的啊?
§ 你除去学习之外都看什么书?
面试准备
下面是我花了将近一年的时间整理的一份面试题库。这些面试题,包括我本人自己去面试遇到的,还有其他人员去面试遇到的,我都统一的整理了一下,希望对大家有用。作者不易,如有错误望见谅。
一、Android基础+进阶
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源码分析
......
由于篇幅有限,只能分享部分面试题,更多面试题及答案可以我的【Github】阅读下载哦~无偿分享给大家,算是一个感恩回馈吧
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
二、Java基础+进阶
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 容器类的设计讨论抽象类和接口的应用
由于篇幅有限,只能分享部分面试题,更多面试题及答案可以我的【Github】阅读下载哦~无偿分享给大家,算是一个感恩回馈吧
三、数据结构与算法面试题
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<u style="">[m]</u>[n],每行每列都是增序的,实现一个算法去寻找矩阵中的某个元素 element. 搜狗
8.排序算法有哪些?
9.查找算法
10.串
四、计算机网络部分
1.HTTP协议
2.TCP/IP协议
3.TCP的三次握手与四次挥手理解及面试题
4.网页中输入url,到渲染整个界面的整个过程,以及中间用了什么协议?
5.TCP和UDP的区别?
6.HTTP的几种请求方法具体介绍
7.HTTP请求和响应报文的格式,以及常用状态码
8.一个 TCP 连接上面能发多少个 HTTP 请求
由于篇幅有限,只能分享部分面试题,更多面试题及答案可以我的【Github】阅读下载哦~无偿分享给大家,算是一个感恩回馈吧
成长心得
不说废话,只说关键点:
(1)要有技术总结。技术点总结、遇到的坑总结、大技术点专题总结(笔记+代码示例),整理成笔记,时常翻看(写博客也需要用笔记先总结好)
(2)有笔记习惯。记录技术,异常,新技术,复盘总结,日报总结,学习计划,好的点子等,一切认为可总结的技术点,都做成笔记。后期翻看时,可以增加自己的思考角度维度,为日后做核心岗位做准备。我这个习惯已经保持了2年多,当前能完成跳槽,这个习惯给了我最大的支持,让我水到渠成。
(3)看源码学习。好奇心多一些,当成享受,时间长了,你就自然而然的厉害了。
(4)如果对公司有期望,做事要负责实干,领导的刁难或严苛,要学会皮实应对,说不定是扶持你上位的考验
网友评论