秋招正式结束,最后感谢百度给予的认可,真的有种受宠若惊。简单回顾一下秋招。也给出自己的面经,文章最后列出两个自己看的资料。
- 3月:
挤出时间去找了几家实习,在毫无准备的情况下,因为知道不能出去实习,正是这几次被按在地上摩擦的面试经历,让自己清晰的认识到找工作需要好多好多东西。 - 9月:
正式开始秋招,这期间每天都在焦虑中度过,尤其在字节二面挂收到感谢信,小米二面完未收到恭喜涵,特别是贝壳一轮游之后自己深深的陷入的自我怀疑,每天味觉不振,每晚都会醒好几次,人也变得更加消瘦。但是还得继续,不想面临一毕业就失业的尴尬局面,9月前半段疯狂笔试,中下旬疯狂面试,还记得打破记录的是一天面了5家,面完人都坐不住了,每天在外面,面试前的紧张,面完赶下一场的疲于奔命,有的时候真的感觉好无助,特别是19号那天中午在餐馆里吃了午餐,趴在那睡得那一会,真的想给我个offer,让我结束秋招吧。 - 转机:
9月20日凌晨,像平常一样,凌晨两点左右醒来,发现邮箱里收到了vivo的录用函,那一刻真的很感动,很晚很晚了,激动得好久才睡着,白天下午就去了签约沟通会,还送了一个大礼包,真的很感谢。在那之后又收到了欢聚时代的口头offer,以及oppo的offer,就这样慢慢的好起来,心情和状态慢慢好转,到最后面试百度时,真的很放松。 - 总结一下面试的公司:
vivo 欢聚时代 oppo 海康威视 百度 华为 收到offer,美团 小米 4399等消息,科大讯飞收到offer意向书怎么又通知无法进入下一阶段, 贝壳一面挂,字节二面挂,阿里一面挂,招银电话面挂,CVTE二面挂,快手、京东笔试不过,滴滴、爱奇艺、小红书、网易、老虎集团、酷狗、招银信用卡中心笔试之后无消息,猿辅导、keep面试没去,很抱歉。 - 最后:
真心感谢这个过程中出现的每一个面试官,这个过程虽然很痛苦,但是对自己的积累真的很重要,后面面试中出现了很多内容都得到了前面面试官的点拨,非常感谢。也感谢那个疲于奔命的自己,即使面试冲突了,哪怕时间错过了,我也会毫不犹豫的赶过去,也感谢这些公司给了面试机会,特别是vivo和百度。
总结:关于秋招总结几点,
- 1 心态,被拒绝是难免的,一定要调整好心态,同时面试时适度紧张,想开点,心态是最重要的。
- 2 基础,每个学科的基础性知识要掌握好,秋招的过程是一个查漏补缺的过程,做好每一面问题的记录,后来恶补。
- 3 简历,简历上写的东西一定要好好理解透,如果被面试官发现你是真的只是会用,那会很被动,也不用理解很透,只需要了解个大概,核心概念要知道。
- 4 项目,简历上的项目要烂熟于心,最好介绍前要介绍一下应用背景。
- 5 技巧,从自我介绍开始,就要学会介绍自己擅长的,在回答问题的时候也要学会将面试官引导到自己会的领域。
- 6 关于手撕代码,其实现场手撕题目一般不会太复杂,多为链表、数组排序、查找、二叉树、字符串操作、海量数据操作等,面试官主要考察你的思路、代码风格等。最好掌握递归、动态规划等思想。如果写不出来,也就没有必要一直耗着,有思路说一下也行。
简书不支持font标签,可移步我的小站: 2019我的秋招
实习
3月19日阿里电话一面
- <font color=#0FEF00>强引用和弱引用</font>。
- HashMap实现。
- <font color=#0FFF00>ArrayList和LinkList的区别;</font>
- 红黑树;
- 设计模式;
- View的绘制;
体会:
- 说话要有条理,要会组织。
- 基础知识要扎实。
- 要学会看源码,专注某一个方面的技术,懂得透彻才行!
3月26日腾讯电话一面
- 异常,多线程,反射,什么地方使用,解决了什么问题!
- 泛型,和c++模版的区别,泛型擦除。
- activity和service的区别。
- activity,fragment,view的区别,什么时候只能用activity,什么时候只能用fregment。
- 进程保活,为什么程序会死掉。
- svn和git的区别。
体会:
- 想问题不能太久,不一定要一个具体的答案,重在分析!
- 基础,基础,基础,平时积累!
4月17日华为面试
- StringBuilder和StringBuffer的区别,分别怎么扩容
- 画项目的一个结构
- 项目功能分块
- 广播分类,分类方式等,有序无序,如何让一个APP接收另一个APP指定的广播。
- 六种设计原则,用过哪些
- 23种设计模式,用了那些
- hashmap实现原理
- 活动的四种启动模式,淘宝页面的方案
- startservice和bindservice的区别
- 项目中是否使用异步,并发。
- framework结构,画出来(懵逼)[你结构都不知道,写出来的东西只是能用,华为是做手机的,不是做Android的,继续懵逼]
- 如何报心跳
13.内存泄漏,遇到的,如何处理的。
优酷(时间不记得了)
- RecyclerView 缓存机制,缓存多少个,为什么使用RecyclerView
- 微信小程序是如何运行起来的。
- Gradle如何分模块编译。
秋招
8月30日 平安科技
- JVM分那几个部分
- 堆内寸和栈内存的区别
- 有哪些异常,怎么处理。
- 有哪些树结构,应用场景
- 数据库索引
9月2日 字节一面
- Android 4大组件(英文),及其作用。
- 活动的启动模式和相应活动栈的变化
- 自定义view,界面是如何绘制到手机屏幕上的。
- HashMap HashTable ConcurrentHashMap的区别。
- HashMap中如何获得key的hash值,hashmap的负载因子是否可以改变。
- 时间复杂度和空间复杂度分析。
- 手撕字符串反转(摆手算法)
9月5日 字节二面(凉面)
- <font color=#00FF00>HTTP状态码(1,2,3……开头的分别代表什么意思,206了解吗)</font>
- <font color=00ff00>HTTPS和HTTP的区别,秘钥是如何交换的;</font>
- <font color=#00FF00>活动的四种启动模式,及其应用场景,问了singleTop的应用场景,没回答好(投的android岗,二面唯一的android问题)</font>
- <font color=#00FF00>get和post的区别,如果参数只是字符串,可以用get代替post吗,我说不能,get参数长度受限,面试官:具体限制多少,(不知道) </font>
4.<font color=#00FF00> Java的异常;(我居然答出除0是不可try的,笨死了)</font> - 浏览器输入网址,经历了什么。
- DNS解析了解吗(只知道DNS解析是通过域名得到ip);
- <font color=00ff00>HashMap和HashTable的区别,平时项目都使用的谁?(以为不会再问计算机网络了,结果……)</font>
- TCP和UDP的区别;
- 3次握手和4次挥手。
- 手撕单链表添加,删除,反转(比较easy,最后面试官问会不会断链);
9月2日 小米一面
- JVM 内存模型,简单点的堆栈理解
- java四种引用在GC的表现
- final finally finalize 区别
- Http get post
- Android 消息机制,线程是如何确保其Looper只有一个的。
- ThreadLocal
- view绘制,3个函数
- Android 事件分发机制,三个函数,以及其中的调用关系。
9月4日 小米二面
- 手写字符串转数字(逐位解析,判断溢出);
- Activity的生命周期函数和表现。
- 自定义view相关,其layout_width等属性如何影响其呈现。
- bindService和startServie的区别和各自的应用场景。
- <font color=00FFF00>HashMap和HashSet的实现。</font>
- <font color=00FF00>volatile关键字的作用(讲到了java内存模型,面试官问我怎么了解到java内存模型的,我很诚实的说准备面试~);使用 volatile 可以禁止 JVM 的指令重排,保证在多线程环境下也能正常运行。</font>
- <font color=00FF00>java代码在JVM上会乱序,为何(不会)->指令重排列 </font>;
- 几个线程池的线性个数设置,以及其如何管理生命周期;
- <font color=#00FF00>装箱和拆箱如何实现->valueOf 和 xxxValue(xxx为相应包装类型对应的基本数据类型,比如int)</font>
- 泛型如何实现;
- 项目难点、如何解决。
9月2日 阿里一面
- <font color=00ff00>内存泄露 Android 层面,Java层面的原因。</font>
- 项目中的Thread如何管理,有没有封装相应的工具内。
- ArrayList HashMap的区别。
- 栈和队列的区别,分别用数组和链表实现队列,比较区别。
- 有A、B两个二叉树,判断A树是否是B树的一个子树。
- 如何实现双向循环链表,Android中双向循环链表的使用。
- 有哪些排序,选择一个排序,介绍他的实现思想,如何分析排序效率(我答了时间复杂度和空间复杂度,继续追问,用空间换取时间,给了一个场景,如果用户的手机内存比较小512,如果用空间太多,会有什么影响)。
- TCP和UDP的区别,QQ聊天,视频,游戏,那个对可靠性需求高,那些用了TCP。
- Android中两种广播 静态广播和动态广播,有什么区别?(明明经常用,也知道,当时居然脑袋怎么突然就想不起来了——常驻和非常驻的区别)。
- Android用到那些布局,(答了经常用的线性和相对,继续追问,那种会效率高点……)
- Thread AsyncTask IntenService 有什么区别。
- 是否用过Android的Sqlite,(学习用过,就没追问,估计知道我不会)
- Android xml布局三种复用的方式 include,merge,ViewStub的区别(我只知道前两种,也没用实际用过,没答上来)。
9月10日 招银电话一面
- <font color=00ff00>类加载,在什么时候加载一个类
- <font color=00ff00>类的初始化</font>
- ThreadLocal
- Android中的进程通信
- 消息机制,为什么一个线程要有一个looper,不能共享吗
- <font color=00ff00>Service运行在单独的进程还是UI进程</font>
- <font color=00ff00>webview,混合开发</font>
- <font color=00ff00>IntentService</font>
- Binder参数限制
9月11日 贝壳一面(凉面)
- <font color=00ff00>px sp dp 的区别</font>
- java内存模型,volatile关键字
- long double int 安全性(大意是多线程操作那个类型的变量是安全的),long double是如何存储的。
- 数据库索引,B+树叶子节点存储的信息
- 聚集索引和非聚集索引
- 海量数据排序。
- 指令重排列问题。
- 垃圾回收算法。
- 可回收分析,new一个对象是否可回收。
9月16日 海康威视一面
- 活动生命周期,活动的启动模式。
- 服务的启动方式,多次startService如果stop问题。
- 四大组件
- 为何不能在子线程中更新UI问题。
- 项目。
- 说一个你关注的公众号中的一篇文章。
(剩下一些记不清了,总体较为基础)
9月17日 华为一面
- 项目
- 活动的四种启动模式。
- C++ 申请内存的方式,如何释放内存(我只答了析构函数,面试官还提示了delete)
- 四大组件
- android中java和一般的java有何区别(答得比较差,说了google针对android封装了许多东西,比如说AsyncTask等,然后android运行在Dalvik虚拟机,并不是普通的jvm上,同时字节码也不同,巴拉巴拉巴拉)
- 项目中是如何优化ZXing二维码扫描的。
- java中的多线程池。
- 手撕一个android中多线程实现贪吃蛇的逻辑,在线程中获得上下左右方向,并更新UI(这里其实主要考察的是线程的使用,以及android中不能在子线程更新UI等)。
9月17日 华为二面
- 先介绍项目。
- 手撕一个字符串问题,在字符串a中找到字符串b第一次出现的位置,以及出现了几次(我闷头一想这不是kmp吗,结果写了后,面试官说,你直接substring不就行了,些什么kmp,那一刻,觉得自己挂了)
- 说说项目中如何处理数据库并发的。
- 如何解决sql注入攻击(我说了参数绑定,面试官似乎不怎么满意)。
- 内存泄露
- 如何优化二维码扫描(和一面面试官同样的问题)
- java中8大基本数据类型。
- java泛型
(还有些不大记得了)
9月17日 华为三面
- 先介绍项目,每一个都介绍,面试官对第一个比较感兴趣,叫我仔细给介绍,然后还和我探讨其中一些硬件方案。
- 有什么乐趣,我说看中超,面试官说我心脏很强大啊。
- 问了一下android中四大控件,不是说三面就是聊聊人生吗。
- 活动的启动模式,平时怎么使用的。
(其他就是一些人生话题了)
9月17日 美团一面
- 项目,每一个项目,感觉美团一面全程挖项目。
- 画一下MVP模式,介绍MVP带来的好处。
- 手撕两个数组合并成一个数组,保持有序,写出空间和时间复杂度。
- 如何优化二维码扫描。
- android的静态广播和动态广播
大部分在聊项目,就项目中的一些点做了一些询问。
9月17日 美团二面
- 介绍项目
- 项目难点
- 微信小程序是如何运行起来的(我只说了从服务器上下载程序包,然后面试官问什么格式,我不知道,然后面试官就说其实就是一个zip,然后跑起来的是H5,这个介绍对我而言非常重要,因为百度面试管也同样问了我)。
- 问我做了很多上层应用的开发,那对算法和数据结构还掌握多少,我说数据结构还行,算法有点薄弱,然后他说那就写个算法吧,懵逼,写个n的阶层吧,一下觉得面试管又在逗我,最后写完,他说我只是看看你还记得递归不,我........
- 问了android其他的开发框架,以及新的开发语言Kotlin等等。
- 进程间通信方式
- 内存溢出
- java内存模型
- GC
- tcp和udp
9月17日 vivo技术面
- 介绍项目
- android的消息机制
- 广播分类,静态广播和动态广播的区别。
- android中的服务,可以在服务中做耗时操作吗。
- 你们是如何做进程保活的,介绍一些oom值。
- 将一个数组分成两部分,使其和相接近,我说了和接近就是做差接近于0,然后采用递归尝试着将一个数放到左边右边,面试官说那如果最后一个数很大呢,不会了……其实这个题应该用dp,采用背包问题思想。
- 聊了约瑟夫环问题,1-50个人,围成一圈,报数每9个出去,最后一个是谁,我说用循环单链表。
还有一些记不清了。
9月18日 欢聚时代一面
- 聊项目
- android 活动的生命周期和启动模式。平时用了哪些
- android的消息机制
- android的view绘制,
- android 的事件分发,三个主要的函数。
- 内存泄露
- 如何找到界面卡顿(当时不知道)
- java中四种引用,new一个对象会被回收吗
- GC算法
- 手撕 找到一个链表的中间元素,找到倒数第k个,有什么高效的操作,没想出来。
- tcp和udp
- 如何优化二维码扫描
- 如何做的进程保活
9月18日 科大讯飞一面
- 活动的生命周期。
- 项目
- 科大讯飞的语音合成你使用了,有什么问题,答了一些多音字读不准确。
- 介绍了OCR,介绍了Tesseract。还问我现在如果叫我继承一个OCR,识别手写体需要多久,我说很快,因为不需要训练数据集。
科大讯飞可能在android端没什么大的投入,所以聊了一些其他的问题,也不怎么记得了。二面在技术上就画了一下后台的项目分层结构。
9月18日CVTE电话面试
- 进程保活和活动拉起,简历有写
- 如何优化二维码扫描,还聊到了微信的二维码扫描。
- 你怎么看C++和java,巴拉巴拉巴拉
- java泛型
- java四种引用
- GC算法
- volatile关键字
- synchronized和reetrankLock
- awit和sleep的区别
- 为什么迅雷服务器下载会比浏览器快一点(叫我放开思想想一下,我说可能迅雷中间经过了他自己的服务器)
- https,对称加密和非对称加密
- 线程池和关键参数。
- 实时性要求很高的是游戏是tcp还是upd。
9月19日 百度一面
- 重新说一遍笔试题中的SparseArray和Hashmap的区别。
- 介绍项目
- 二维码扫描如何优化
- Camera如何调焦
- 重载和重写的区别
- 如何在子类中调用父类的方法
- 介绍项目中的东西,将界面的结构画出来,特别是层级关系。
- RecyclerView和ListView的区别
- android的消息机制,Handler的构造函数有传入Looper的吗,Looper.prepare是干什么的。
- 开发一个微信小程序的过程是怎样的,微信小程序是如何运行起来的(此时真的很感激美团二面面试官)
- js是如何调用java代码的,我说了我用过WebView写过混合开发,懂一丢丢。
- 写布局文件时需要注意什么?如何优化。
- 微信小程序是基于什么运行的,我说了H5,面试官说其实就是一个浏览器跑了一个本地的网页,也就是H5。
9月19日 OPPO技术面
- 介绍项目
- 聊项目,面试官用过ZXing,所以对我用的ZXing以及优化这块非常感兴趣,还说二维码识别其实只需要部分信息就可以。再问我有没有从bitmap上下功夫,我说失败了。
- 什么是ANR
- 四大组件
- 广播的种类,以及使用。
- android的消息机制。
- view的绘制
- 内存泄露,使用什么检查,我说LeakCanary,他说LeaksCanary只能检查一些组件啥的,并不全面。
- GC算法,GC Root中存放了那些信息。
- 标记-整理如何实现。
9月19日 欢聚时代二面
主管面,没有多少技术问题,大多关注在项目上。
- 项目,难点,给面试官看了写的微信小程序。
- 二维码扫描优化如何做的。
- 前后台是如何分工的。
- 在培训用户中的难点是什么。
- 觉得把对用户培训的时间拿来学习算法和数据结构是不是要好很多?
- 工作地点等等……
9月19日 CVTE视频面(凉面)
1 . 介绍项目
- 项目中用到了什么设计模式,打了单例模式和观察者模式
- 写一个观察者模式,写得不好,连观察者和被观察者都没有搞清楚。
- 介绍一下MVP,MVVM
- 介绍一下2018年google开发者大会上提出的AAC(完全不知道,哎)
- java中的四种引用
- Android各个版本的新特性。
- LeaksCanary原理,还有用过其他的内存泄漏检测工具吗
- okttp源码了解吗
其他的不记得了
9月20日 百度二面
(这是我遇到最新颖的面试,面试官抛出概念,我自己讲,能讲多少讲多少)
- 深挖简历上的各种了解。
- 讲一下okttp,那些关键的对象,同步和异步的访问函数。client是那个client
- ButterKnift如何使用,需要注意那些问题
- DataBinding如何使用,了解其实现原理吗,你都不用MVVM,你用DataBinding干什么。
- 讲一下AIDL,说说进程间通讯方式。
- 除了GPS定位还有什么定位,我说网络定位,问我如何实现,我说不知道,他开导说手机连接着什么嘛,我说基站,然后一通巴拉巴拉,不知道自己说了啥。
- 讲一下二维码扫描的优化
- 说一下如何做到进程保活的,什么是oom值,以及JobScheduler
- 学过C++吗
- jvm内存分区,栈溢出发生在那
- 手撕 从先序遍历和中序遍历复原原来的二叉树
- 手撕 快排 插入排序
- https的机制,加密,证书秘钥交换等。
- android 的消息机制,
- view绘制
- 事件分发流程,拦截函数叫什么,用没用过事件分发。
- 学android看了那些书,《第一行代码》有多少页,第一行代码和开发者探秘有那些内容。
- 布局优化。
9月22日 百度三面
主管面,一半人生一半技术吧,最后介绍了20多分钟目前他所在的部门所在做的东西,真的超乎了我这种菜鸡的想像啊。
- 聊项目,很细很细
- 很关注二维码扫描优化这块,有没有在bitmap上下功夫。
- 为什么做进程保活和活动拉起
- 为什么地图用百度的,语音合成用科大讯飞的,我说做了一些比较,发现百度的在某些多音字上读不正确。
其他的就是一些人生话题,三面感觉真的很nice。
资料
java 计算机网络 操作系统等
Android相关
大神整理的剑指Offer