Android社招面试题整理
Android:
activity,fragment生命周期
启动模式:appA启动appB栈的变化
RecyclerView与ListView的原理,观察者模式,复用
布局优化怎么做的?LinearLayout和RelativeLayout在性能上的区别。
activity从后台进程切换到前台经历的生命周期;
listview左边网络图片右边文字的优化。
描述一下Handler的原理
一个线程可否有多个Handler,怎么保证只有一个Looper
由此问题衍生出Threadlocal,面试官问Threadlocal如何保证只有一个对象,这里我答的不是很好,Threadlocal其实在Android的looper里是判断了只有一个的逻辑,但真正的使用并不是这个特性
应该是一个 Threadlocal 对象在 ThreadlocalMap里对应一个值
Looper和handler的关系;
自定义view的步骤
自定义view:讲了项目中的实际应用,顺便说了下事件冲突和解决
mvc/mvp/mvvm:补充说了对职责的理解
写一个单例;
新特性
对kt的看法
EventBus是如何实现事件通知的?
Glide的缓存?Glide是如何加载Gif图片的?
RxJava的操作符?项目中是如何使用RxJava的?
View的事件分发
给出一个activity的布局:activity里包含viewgroup1,viewgroup1里包含viewgroup2,viewgroup2里包含button,问touch事件的传递和处理机制;
WebView的优化,如果出现了数据的交互该怎么做?(AIDL),Binder怎么实现进程间通信的?mmap的模型?
内存优化?RecyclerView的缓存机制,如何优化?
android问的很基础但是平时有可能不注意的,像dpi的算法,onmeasure中不处理wrap_content,就会出现match_parent一样的效果的原因,compilesdk和targetsdk的区别fragment hide show和replace的区别。
JAVA:
比较string="aaa"和string=new string("aaa")。
arraylist,linkedlist,vector效率;
"abcde"字符串在内存中占多大,这些字节在JVM的编码格式
finally和return的顺序。
替换多重嵌套的if else写法;
private和static修饰的方法可以重写吗;
类A私有变量i,类B继承A私有变量j,构造方法带各自的变量,哪个编译成功;
接口和抽象类的区别,一个类的能不能多继承,能不能实现多个接口
接口类的非方法能不能被修改?不能,接口类里非方法的类型都是final修饰,所以必须初始化并且不能被修改。
抽象类的变量可以被继承和修改么?可以。
final关键字
JNI NDK的了解。
lock和synchronized。
线程安全问题,sychronized、lock/unlock的区别使用,公平锁和非公平锁的概念。
sychronized是如何体现公平锁和非公平锁的(CAS、锁自旋)?
线程池
线程池的几个参数和意义都描述了一遍,多个线程执行时,核心线程、最大线程、阻塞队列满和不满的情况下执行顺序和过程
怎么解释线程池阻塞队列的阻塞,这里我没太明天面试官对阻塞的理解,答的有点没对口
核心线程是一开始创建还是有任务时创建,
HashMap原理,在什么时候扩容(当加入的元素大于阈值threshold后)。 以及线程安全的`HashTable`、`ConcurrentHashMap`的原理。
设计模式
单例,工厂,观察者,装饰者。
讲了项目中责任链的应用和自己的理解
GC如何标记要回收的内存?GC Roots有哪些?
JVM堆和栈的作用,进程和线程的作用,堆栈和线程进程的对应关系
死锁怎么产生?如何去解决死锁,多个方案
线程同步问题,自增是原子操作吗?如果要做到线程安全的自增要做怎么做?
问到了线程池实现原理。
sleep wait区别,为什么wait是object方法不是thread的方法。、
问了不同品牌兼容性怎么处理,屏幕适配。
计算机相关:
问Scoket和Http最大的区别是什么?
TCP会检查包的顺序么,Tcp怎么控制包的发送(滑动窗口)。
看到项目中使用了WebSocket,讲下它和Http的区别?
有没有用过Linux
Http是在哪一层,Https使用了非对称加密还是对称加密?TCP和UDP的区别,为什么UDP不可靠还要使用UDP
拥塞控制和流量控制的区别
操作系统,进程状态,进程间通信方式,网络2种协议,3次握手,http状态码,request内容,还有一个求二叉树宽度的算法。
算法:
快速排序,分组算法。
快速排序和冒泡排序的稳定性问题
编程题:将一个分数转化成小数形式输出,因为分数只可能是有限小数或无限循环小数。如果小数是无限循环小数,则使用小括号括起。
这题思路是做while轮除。我界定是否产生了无限循环小数是使用HashTable。
快排的过程,时间复杂度,n*lgn是如何得来的?
排序二叉树的插入,如果插入相同的数,需要做什么保证树可以还原(即不允许丢弃到相同的数)?
两桶油漆,A桶全是红色油漆,B桶全是蓝色油漆,将A桶中取一勺倒入B中,再从B桶中取一勺倒入A中,求A桶的蓝红比例和B桶的红蓝比例,是大于、小于还是等于?
用一个数组实现一个循环队列
给定一个只有“R”“G”“B”三个字母的字符串,用一次遍历基于原字符串将他们以“RGB”的顺序排序好(LeetCode原题)
52张扑克牌,取一张不放回,再取一张, 两张为相同颜色的概率是多少?
有两个数字非常大已经超出了long型的范围,现在以链表的方式存储其中链表头表示最高位,例如1->2->3->4表示1234,请设计一个算法求出两数之和;
智力题:给一篮子鸡蛋,如何用最少的比对次数找到最大的和最小的鸡蛋, 我的回答是 一开始,随便拿出两个鸡蛋,然后接下来剩下的鸡蛋每拿出一个,就和这两个进行比较,如果比两个中小的鸡蛋小就替换小的那个,如果比大的鸡蛋大就替换掉大的那个,这样比较次数就是 (n-2)*2 ,因为有些鸡蛋只用比一次就行了(因为是最小的就不用往大的比了),所以结果是小于 (n-2)*2的,但我觉得应该还可以更加快....
项目相关:
问上家公司的项目,你的职责/定位/在项目中属于是什么角色。
在开发中遇到的最大的困难?怎么解决的?
之前项目的一些介绍使用了哪些主要技术点,出现该问题是怎么解决的。
项目中的联网模块怎么实现的?UDP和TCP的区别?
让你设计一个类似viewpager的组件,要求增加左上或右上的角度翻页效果。文字内容中的可点击链接是怎么实现的。我大概说了一下思路,面试官说这样做会有问题,我请教他应该怎么做。
发散问题:
为什么选择计算机这个专业。
为什么离职/为什么想换公司
在上一个公司学到了什么
选择公司因素,按优先级排个序
介绍自己/用关键词描述自己
家庭,社会,感情关系
你会想在团队里面承担一个什么样的角色?
代入用户思维和不代入用户思维做产品有什么区别?
平时的爱好是什么?
你觉得一个好胜心过强的人会有什么样的问题?
对我们公司了解多少?有什么想问的?
有没有给自己制定一些计划?对自己的要求有多高?
学习的渠道、方式,有GitHub吗?看什么样的书?
学习是基于公司项目学习,还是个人兴趣学习?
预计到岗时间,期望薪资
有什么想问的:
本文地址:https://blog.csdn.net/weixin_37228152/article/details/108111975