2018校招面筋总结
数据结构
- 红黑树 pk 平衡二叉树
- hash表处理冲突的方法
算法
手写
- 最长无重复字符子串
- 链表的增、删、查、逆序
- 数组实现队列,要求可以动态扩展,保证较高的空间利用率(即pop出队的空间可以重复利用)
思路
- 有序数列找最先重复的数? 无序数列?
- 不用辅助内存,交换两个数(异或,加和)
- 根据起点、终点查询地铁路线?得到路径后如何判断某个节点是否是换乘站?
- LRU缓存实现
- 快排复杂度?什么时候最坏?如何避免最坏?如何优化快排?
- x轴上有n个点,已知每个点的位置p和速度v(正表示向右,负表示向左),每当两个点相碰就消失,问最后碰撞的时间t和两个点
- n个无符号整数找第k大,要求最坏O(n)时间复杂度,O(1)空间复杂度
游戏 + 场景
- n条水平的平行线和m条垂直的平行线可以围成多少个矩形?(提示:组成一个矩形需要什么条件)
- 网盘如何提高服务器硬盘利用率
- 道具可以修复、升级,需要消耗时间,完成时要弹出提示,每1/30秒会刷新一次界面,怎么判断是否要弹出提示?
- 一张地图,有n个十字路口,1个自由移动的玩家,要求随机分配m个道具到十字路口上,满足以下条件
- 每个道具距其他道具或玩家的距离不得小于h
- 道具被玩家捡到之后,会重新放置到随机的十字路口
- 每个十字路口只能有一个道具
c++
- c和c++的区别
- static的特性
- 友元函数
- 多态原理?析构应该注意什么(virtual)
- 构造函数中可以调用虚函数方法吗
- dynamic_cast
- const char * fff(const char* const t ) const 每个const的含义
- STL用过哪些?vector、set的实现,介绍一下红黑树
- 写一个简单的服务端客户端伪代码,哪里可能会阻塞,怎么解决阻塞的问题?
- 对于char,int这些怎么实现sizeof(提示:指针)
- c++怎么分配内存,如果分配不成功会发生什么?怎么处理?不捕获异常能不能直接处理
- c++内存分为哪些区
- 左值右值
- 内存池?为什么需要内存池?怎么实现?
- 大端小端
面向对象
- 面向对象的原则有哪些?
- 为什么说组合优于继承(推荐Effective in Java)
- 一个非面向对象的语言如何实现面向对象的特性?(其实就是深入剖析c++与c的不同)
java
- java修饰符有哪些
- ArrayList、LinkedList区别
- 接口、抽象类区别
- list删除符合条件的元素的方法有哪些?可能出现的问题?
- object方法
- 线程同步的方式
- volatile能用于多个写多个读的线程吗,一写多读呢?添加了那些内存屏障,内存屏障有哪几种
- 单例模式中为什么加volatile
- synchorized、可重入锁的区别
- 创建线程的方式有哪四种? Callable怎么获取返回值的?
- 线程池
- HashMap原理,如何用key查到value
- hashmap使用注意事项,可能会出现什么问题
- 如重写hashcode()、equals(), 修改了key后去get或put,多线程
- hashmap为什么数组容量是2的幂
- ConcurrentHashMap实现 分段锁 锁的粒度 CAS
- string stringBuffer stringBuilder
- IO BIO、NIO、AIO
- java1.8新特性
- 什么时候会出现栈溢出
- java字符编码类型?几个字节?utf-8呢?8什么意思?
- 什么时候会内存泄露?
JVM
- 内存回收算法 GC root有那些
- 栈上的内存怎么回收(作用域 jvm操控)
- 强软弱虚 虚引用有什么用
- 类加载过程?初始化都做了什么?为何要把符号引用转换为直接引用
- 方法区存在哪里? 元空间?
- .class文件的组成
- 静态绑定和动态绑定
Spring
- AOP
- 为什么使用SSM
- 为什么选择单例?什么时候选择单例?(无状态或状态不可变)
android
不止一次被问可以演示下你做的app吗?然后问你自己做的怎么都不用就很尬,所以如果有比较满意的app可以演示给面试官
- 四大组件
- 粘性广播、有序广播
- 显、隐式intent intent-filter
- service启动方式 什么时候会停止
- 如何避免接收伪装广播
- 耗时操作怎么做?Handler中可以进行耗时操作吗? HandlerThread?
- Handler机制
- 如何在其他线程使用Looper
- Handler内存泄漏
- binder机制 AIDL
- 自定义view(左边一张图片,右边上下两栏文字,不用组合view)
- 自定义view的方式, 怎么自定义view属性
- view事件分发
- px、dp区别, 屏幕适配
- material Design有用过吗
- fragment知道吗
- 移动的动画有几种实现方式 平稳滑动的动画怎么实现
- scroll用过吗
- SQLite怎么使用,数据库有几种使用方法,可以用ContentProvider吗
- 性能优化
- 电源管理
数据库
- 写一条多表联合查询语句,谈谈怎么去优化
- 数据库查询优化有哪些手段
- 数据库索引的种类和实现
- 复合索引 最左匹配特性
- 索引失效原因 like '%...' 为什么会让索引失效
- 事务 隔离级别
- 数据库多个线程修改查询怎么保证一致?
- 数据库join怎么实现的
- 数据库死锁
计网
- HTTP报头、状态码
- tcp三次握手,四次挥手
- 断点续传
- tcp连接如果客户端崩溃服务端客户端都是什么状态
- MTU,MSS是什么
- 客户端发送fin后如果还有消息未处理会发生什么
- 客户端什么情况会出现很多time_wait
- 在浏览器输入url回车到页面显示都发生了什么?
线程安全
- 写代码:一个生产者消费者(面包,厨师,顾客)
- 写代码:四个线程输出15次abcd
- 主线程写一个buf,子线程去读,怎么做?读写时候的游标更新可能会出什么问题?怎么解决?
linux
- 字节流和字符流的区别
- 阻塞,非阻塞,同步,异步
- 进程通信
- 信号安全
- io写操作之后会立刻发出去吗
- tcp连接Server有两个队列,哪两个
- io多路复用
- select、poll、epoll区别
前端
- 为什么异步效率高
- 跨域 域的概念
- 事件阶段 捕获和冒泡区别
- 休眠怎么实现
- 事件多怎么优化
- nodejs为什么加载模块用同步
询问面试官
- 除了hr,不要问薪资、福利等
- 不要问应聘或岗位以外的问题,可以问技术栈、技术氛围、职业评级与发展空间等等
- 最后可以问一下面试评价