待补题

http:/hdu6712


面经链接:

hua-dong
面经分享
https://www.nowcoder.com/discuss/386033?type=2
https://www.nowcoder.com/discuss/385685?type=2
https://www.nowcoder.com/discuss/385965?type=2
https://www.nowcoder.com/discuss/385269?type=2

面试问题:

  • 第k人出队列,查询第k人问题
  • 2SUM:双指针;3SUM:枚举套双指针;4SUM:n^2枚举套双指针或n^2log预处理+双指针
  • 抢红包算法,在线分配,随机算法,和先来后到无关
  • 中文文本内关键短语检索
  • 多个序列的最长公共子序列
  • 先给你n条指令(范围不清,大概可以建立ac自动机)。然后电脑上26个字母累计随机出现100000次,当出现一条正确的指令时立即执行,然后这一段字母就没用了,继续后面的。poweroff是关机指令。问出现poweroff的概率
  • 图像处理RGB还有透明度的含义,建立模型分析透过玻璃看到物品的颜色。RGB描述颜色,是三种颜色光线的强弱。不同颜色可以透过玻璃的光线数量不同,这也导致了有透明的玻璃,红色的玻璃等
  • 数据库索引
  • c++模版类,模版函数,STL实现,新特性
  • RSA算法原理(一)hash冲突4种解决方法
两张图叠加,A为前景图,B为背景图。此时透明度为alpha:
前后景是按100%分配当然你也可以按256分配
R(C)=(1-alpha)*R(B)+alpha*R(A)   
G(C)=(1-alpha)*G(B)+alpha*G(A)   
B(C)=(1-alpha)*B(B)+alpha*B(A)
提出者以alpha来命名是源于经典的线性插值方程αA + (1-α)B所用的就是这个希腊字母。

18min


你说你熟悉并发编程,那么你说说Java锁有哪些种类,以及区别(果然深度不一样)
公平锁/非公平锁
这个是在ReentrankLock中实现的,synchronized没有,是用一个队列实现的,在公平锁好理解,就是先进这个队列的,也先出队列获得资源,而非公平锁的话,则是还没有进队列之前可以与队列中的线程竞争尝试获得锁,如果获取失败,则进队列,此时也是要乖乖等前面出队才行
可重入锁
如果一个线程获得过该锁,可以再次获得,主要是用途就是在递归方面,还有就是防止死锁,比如在一个同步方法块中调用了另一个相同锁对象的同步方法块
独享锁/共享锁
共享锁可以由多个线程获取使用,而独享锁只能由一个线程获取。
对ReentrantReadWriteLock其读锁是共享锁,其写锁是独占锁
读锁的共享锁可保证并发读是非常高效的,读写,写读,写写的过程是互斥的。其中获得写锁的线程还能同时获得读锁,然后通过释放写锁来降级。读锁则不能升级
互斥锁/读写锁
上面讲的独享锁/共享锁就是一种广义的说法,互斥锁/读写锁就是具体的实现。
互斥锁在Java中的具体实现就是ReentrantLock
读写锁在Java中的具体实现就是ReadWriteLock
乐观锁/悲观锁
乐观锁就是乐观的认为不会发生冲突,用cas和版本号实现
悲观锁就是认为一定会发生冲突,对操作上锁
分段锁
在1.7的concurrenthashmap中有分段锁的实现,具体为默认16个的segement数组,其中segement继承自reentranklock,每个线程过来获取一个锁,然后操作这个锁下连着的map。
偏向锁/轻量级锁/重量级锁
在jdk1.6中做了第synchronized的优化,
偏向锁指的是当前只有这个线程获得,没有发生争抢,此时将方法头的markword设置成0,然后每次过来都cas一下就好,不用重复的获取锁
轻量级锁:在偏向锁的基础上,有线程来争抢,此时膨胀为轻量级锁,多个线程获取锁时用cas自旋获取,而不是阻塞状态
重量级锁:轻量级锁自旋一定次数后,膨胀为重量级锁,其他线程阻塞,当获取锁线程释放锁后唤醒其他线程。(线程阻塞和唤醒比上下文切换的时间影响大的多,涉及到用户态和内核态的切换)
自旋锁:在没有获取锁的时候,不挂起而是不断轮询锁的状态

Http请求的过程与原理
三次握手与四次挥手?
通过HTTP网络请求过程中的TCP协议
TCP连接的特点
相较于UDP来说,更加安全可靠,是面向连接,传输的话是以流的形式传输
TCP连接如何保证安全可靠的
为什么TCP连接需要三次握手,两次不可以吗,为什么
不可以两次握手只能一方确认自己的收发没有问题,而另一方的收没问题,发可能存在问题

如何设计存储海量数据的存储系统

海量数据的解决方案:
页面上:
使用缓存;页面静态化技术;
数据库层面:
分离数据库中活跃的数据;批量读取和延迟修改;读写分离;使用NoSQL和Hadoop等技术;分布式部署数据库;应用服务和数据服务分离;
其他方面:
使用搜索引擎搜索数据库中的数据;进行业务的拆分;
高并发情况下的解决方案:
应用程序和静态资源文件进行分离,静态资源可以使用CDN;
集群与分布式;
使用Nginx反向代理;

缓存的实现原理,设计缓存要注意什么
将热点数据放在内存中,用户查询时命中内存中的数据而不用到数据库中查询
注意缓存的一致性,缓存雪崩、击穿、穿透的问题

淘宝热门商品信息在JVM哪个内存区域
??,不应该在缓存中嘛,然后落地在数据库里,跟JVM有屁关系
操作系统的页式存储
把内存分成大小相同的内存页,然后程序通过页表来查询到自己的存储位置,这样就可以使用不连续的内存来加载程序
事实上现在都用虚拟内存的方式,把程序分段加载到虚拟内存中,再把内存分页,通过段表、页表的形式来映射程序在内存中的位置

Lucene全文搜索的原理
先将全文由分词器进行分词,会提取出关键词和频率,然后这个关键词后面也会跟着一个链表,这个链表记录了有个关键词的文档。我们通过关键词搜索就可以找到这串链表,也就得到了所要的文档了。

构造(析构)函数里面调用各种函数的情况(调用(纯)虚函数)
虚继承
函数内联内会出现的问题
宏定义参数的副作用
类构造的全过程
select,epoll
伙伴算法
slab

[大数据处理]——bitmap,布隆过滤器

bitmap
布隆过滤器


聊一些你的项目;
聊一件体现逆专业能力的一个项目或者一件事;
看过那些书;
场景题,监控水位,判断单位时间请求数的曲线是否正常等;
聊一件ACM案例如何分析问题,解决问题;
假设你要做一个JAVA项目,怎么让自己快速达到可以开发的状态。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容