一、计算机网络
1、谈谈ISO七层模型、五层模型、TCP/IP模型,分别阐述没一次层的作用与区别?
1)
2、谈一下TCP、UDP有什么区别?
3、谈一下为什么TCP是面向连接的?能说一下三次握手、四次挥手吗?
二、数据结构
*话题一:数组、链表
1、能谈一下数组、链表的区别吗?
数组:查找快、更新慢。
链表:更新快、查找慢。
2、为什么数组比链表查找快(从内存的角度说)?或者数组和链表在内存上的表现是什么样子的?
数组是连续的存储空间,链表是在内存中存储是碎片化的。
3、那怎么改善链表的查找速度?
跳表
4、跳表它本质上跟那种查找思想类似?
查找:二分查找、hash查找
类似于二分查找的思想。
*话题二:查找、排序(排序需要手写代码)
1、谈一下你知道的排序?(冒泡、快排、归并比较常见) 时间复杂度,排序稳定性。
插入排序:直接插入排序、希尔排序
交换排序:冒泡排序、快速排序
选择排序:简单选择排序、堆排序
归并排序
2、谈一下查找?
二分查找、线索查找、hash查找
3、hash查找要考虑的重要问题有哪些?
数组+链表
要考虑hash均匀分布、hash算法。
话题三:树、图基本操作
1、二叉树的前序、中序、后序遍历?
2、还有其他的树吗?比如平衡二叉树:线索二叉树、B+树、红黑树?(基本不问,简单说说算法思想)
3、图的广度优先遍历、深度优先遍历?
4、最短路径之类(基本不问,简单说说算法思想 )?
三、操作系统
1、能谈谈线程与进程的区别吗?
2、谈谈线程的不同状态?
3、线程start()以后马上就进入Runable阶段吗?
处于Ready状态,需要等时间片。
4、什么是线程安全?
5、实现生产者-消费者问题(Java代码实现)?
6、IO有几种模型
阻塞IO、异步IO、多路复用IO
二面:Java基础和架构思想
一、Java基础
1、谈谈java中基本数据类型?
2、谈谈equals与==有什么区别?
去网上找题,别背概念。
3、String用什么实现的?
内部的char数组为什么设计成final?
String为什么设计成final?也是因为它的不可变性质吗?
能谈谈equals和hashcode的分别的作用是什么吗?它们有什么区别?
4、能说一下有哪些容器吗?
List:ArrayList、LinkedList、Vector
Map:HashMap、Hashtable、TreeMap
高并发Map:ConcurrentHashMap
…
5、Map发问连环炮?
话题一:
HashMap与HashSet有什么区别?
hashMap可以key为空或者value为空吗?可以同时为空吗?
HashSet有什么特点?
话题二:
HashMap底层是怎么实现的?
1.6:数组+链表
1.8:数组+链表/红黑树
为什么要二次hash?谈谈扩容|什么时候扩容?
HashMap与Hashtable有什么区别吗?
Hashtable加同步锁有什么问题?能不能有更好的实现方式?
ConcurrentHashMap底层怎么实现的?怎么保证同步的(CAS)?
话题三:
如果前面的,你都答出来了?
什么是CAS?它synchronized有什么区别?
谈谈synchronized?
能谈一下volatile吗?
6、JVM连环炮+并发编程?
话题一:
1、谈谈内存区域?
堆、栈、方法区、(程序计算器、本地方法栈 )|可以不谈
2、堆、栈、方法区分别有什么用?存储什么内容?
3、能谈谈堆吗?
新生代、老年代
4、怎么判断对象不可用?
5、能谈一下GC策略吗?它是怎么回收不可用对象的?
标记-清除,复制、标记-整理、分代。
6、能谈一下垃圾回收器吗?(暂无碰见问的)
7、对象怎么分配的?
话题二:
1、谈一下类加载过程?
2、谈一下双亲委派机制?
话题三:
1、谈一下Java内存模型
2、谈一下Synchronized、volatile?
2、谈一下AQS、CountDownLatch、ReentrantLock?(暂时还没有人问)
3、谈一下ThreadLocal?
4、谈一下CAS?
5、谈一下线程池原理?
二、设计模式
1、谈一下六种设计原则?开闭原则什么意思?里氏XX是什么意思?
2、写一个单例模式?后续自己扩展各种的优缺点?
3、谈一个你熟悉的设计模式?
三、缓存
1、设计一个高效的缓存?
2、谈谈LRU算法?(解决高效的缓存)
三、架构思想 、高并发、大数据量解决方案。
1、一个很大的日记文件,统计出访问排行?
2、mapreduce思想?谈谈shuffle?
欢迎使用Markdown编辑器写博客
本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:
- Markdown和扩展Markdown简洁的语法
- 代码块高亮
- 图片链接和图片上传
- LaTex数学公式
- UML序列图和流程图
- 离线写博客
- 导入导出Markdown文件
- 丰富的快捷键
快捷键
- 加粗
Ctrl + B
- 斜体
Ctrl + I
- 引用
Ctrl + Q
- 插入链接
Ctrl + L
- 插入代码
Ctrl + K
- 插入图片
Ctrl + G
- 提升标题
Ctrl + H
- 有序列表
Ctrl + O
- 无序列表
Ctrl + U
- 横线
Ctrl + R
- 撤销
Ctrl + Z
- 重做
Ctrl + Y
Markdown及扩展
Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。 —— [ 维基百科 ]
使用简单的符号标识不同的标题,将某些文字标记为粗体或者斜体,创建一个链接等,详细语法参考帮助?。
本编辑器支持 Markdown Extra , 扩展了很多好用的功能。具体请参考Github.
表格
Markdown Extra 表格语法:
项目 | 价格 |
---|---|
Computer | $1600 |
Phone | $12 |
Pipe | $1 |
可以使用冒号来定义对齐方式:
项目 | 价格 | 数量 |
---|---|---|
Computer | 1600 元 | 5 |
Phone | 12 元 | 12 |
Pipe | 1 元 | 234 |
定义列表
-
Markdown Extra 定义列表语法:
项目1
项目2
- 定义 A
- 定义 B 项目3
- 定义 C
-
定义 D
定义D内容
代码块
代码块语法遵循标准markdown代码,例如:
@requires_authorization
def somefunc(param1='', param2=0):
'''A docstring'''
if param1 > param2: # interesting
print 'Greater'
return (param2 - param1 + 1) or None
class SomeClass:
pass
>>> message = '''interpreter
... prompt'''
脚注
生成一个脚注1.
目录
用 [TOC]
来生成目录:
数学公式
使用MathJax渲染LaTex 数学公式,详见math.stackexchange.com.
- 行内公式,数学公式为: Γ(n)=(n−1)!∀n∈N 。
- 块级公式:
更多LaTex语法请参考 这儿.
UML 图:
可以渲染序列图:
或者流程图:
离线写博客
即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.youkuaiyun.com/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。
用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。
博客发表后,本地缓存将被删除。
用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。
注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱。
浏览器兼容
- 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
- IE9以下不支持
- IE9,10,11存在以下问题
- 不支持离线功能
- IE9不支持文件导入导出
- IE10不支持拖拽文件导入
- 这里是 脚注 的 内容. ↩