美文网首页Android技术知识
从面试无人问津到手拿百度offer,还原一段野生程序员的成长经历

从面试无人问津到手拿百度offer,还原一段野生程序员的成长经历

作者: 今日Android | 来源:发表于2021-03-28 20:44 被阅读0次

    野生程序员的成长经历

    本人是山东普通一本学历,机电专业,15年转行做的andorid开发。作为一个野生程序员,成长历程比较坎坷,开始靠培训机构或者个人自学,初级时就能入职互联网开发,非常困难,初级入职阶段,就能淘汰一大批培训机构的同学,很幸运自己能实现转变,很感激帮助我的同学和第一家时经理收留信任。靠着自己2年多的不断的学习和积累,从一个小白白成长为一个合格工具人,还完成个人薪资翻倍的跳槽。

    在第二家公司,也慢慢的技术视野和深度的扩展,能从容应对开发和各种问题。由于公司没有涨薪制度,所以就有了跳槽的计划准备,没想到,这一准备,就是2年时间,靠着总结和积累,跳槽就水到渠成,没有多少运气加成,全是踩坑过河。

    所以,对科班人来说,我就是最笨的成长。虽然初期的成长慢了些,但是我有我的坚韧性格,成长多远,多半靠自己,多多灌输自己点励志鸡汤,多多学习别人的长处,多虚心请教别人的心得和学习习惯,成长也是很快的。今年也顺利拿到了百度的offer,附上面经整理!

    百度安卓工程师社招面经(一面、二面、三面已拿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)

    三面:
    § 你为什么选择换工作?

    § 你组里面的人都怎么样?

    § 你怎么解决项目中的难点?

    § 你有工作中遇到过哪些比较麻烦的地方?

    § 你平时怎么学习的啊?

    § 你除去学习之外都看什么书?

    面试准备

    下面是我花了将近一年的时间整理的一份面试题库。这些面试题,包括我本人自己去面试遇到的,还有其他人员去面试遇到的,我都统一的整理了一下,希望对大家有用。作者不易,如有错误望见谅。

    一、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)如果对公司有期望,做事要负责实干,领导的刁难或严苛,要学会皮实应对,说不定是扶持你上位的考验

    相关文章

      网友评论

        本文标题:从面试无人问津到手拿百度offer,还原一段野生程序员的成长经历

        本文链接:https://www.haomeiwen.com/subject/lhrmhltx.html