oppo安卓一面面经(新出炉)
1.自我介绍
2.讲讲java并发
线程池 参数 含义
具体类型及特点
volatile作用 原理
数据为何不一致(JMM) 怎样解决(ThreadLocal)
锁类型 具体的类
并发的集合类 线性的有啥(ConcurentArrayList,包装类)
补充:
java的集合类怎样扩容 如何设计扩容机制来平衡空间浪费和频繁扩容
3.数据库
事务 描述 特性 怎样保证原子性(日志回滚)
索引的优缺点
4.网络
http和https的区别 ssl握手过程 几次 传输的信息
udp报文的结构(源端口、目的端口、校验和、长度)
tcp的可靠性是怎么保证的(重传、校验、流控、重排序、确认)
5.安卓(我告诉面试官没有实际安卓经验,只是了解一些东西)
安卓四大组件 分别做什么
消息机制
事件分发机制
穿插问了Java内部类的类型(匿名内部类、静态内部类以及与非静态内部类的区别)
安卓中很常见的陷阱,因为内部类导致的内存泄漏,为什么会这样(现在才发现完全答错了 T_T 应该从隐式引用来答)
怎么解决这种类存泄漏
6.算法
堆排序的原理、过程
用一个数组举例快排的一次迭代
优化快排,减少交换次数(没想出来,面试官告诉我在中间任选一个数,用两个指针从两边往中间走)
层序遍历二叉树的思路(队列,节点合适入队何时出队)
7.手写多线程的单例模式
8.推理题
青蛙跳台阶 n级台阶 一次可以跳1/2/3步 一共几种跳法
f(n) = f(n-1)+f(n-2)+f(n-3)(当时没有想出来,很耐心的给了提示,夸一下面试官~)
回来后想通了,假如一次能跳a/b/c...z步,f(n) = f(n-a)+f(n-b)+f(n-c)+...+f(n-z)
9.提问
进去了能做啥
用的技术栈是啥
over,回来等通知,希望能过