1. 大家搜索引擎的QPS有多少?html
2000到10000左右java
2. 关于文字搜索的部分, Lucene是怎么设置索引/关键字/类似性度量 的?node
4. 你作的去重、检查有效性的工具在运行的时候监控过性能吗?哪一种资源占用比较多?python
5. 大家的搜索引擎支持图片搜索,是怎么作的?用了什么算法(提取图片特征用了什么算法)?linux
CNN-底层是VGG16, 以前用的是pHOG(分层梯度方向直方图(Pyramid Histogram of Oriented Gradients,PHOG) 是一种描述空间形状的特征向量)git
6. 无论是图片的特征仍是三维模型的特征, 大家提取了以后保存在数据库里面, 而后新来了一张图片, 你也计算了它的特征,那么如何度量这个特征与你数据库中已有图片的特征的类似度呢?面试
答:直接使用欧式距离计算。反问: 大家的数据量大概有三百万,你要是这么作的话,挨个计算距离效率也过低了吧?redis
正确答案:算法
提取特征以后,用Lire计算特征的局部敏感HashCode(局部敏感哈希的特征是3个字符一组,成为一个单词),而后HashCode采用String类型存储。若是有了一个新的检索项过来,先用一样的算法计算其特征以及局部敏感HashCode, 将其转为字符串。而后采起字符串匹配的方式寻找已经存储的HashCode中的匹配项。字符串匹配程度越高的说明类似性越大,这个交给Lire来作。采用倒排索引的方式来加快检索。数据库里的每一个局部敏感HashCode都看做一个个的文档,统计全部文档里面的单词,并创建单词对应的文档索引(倒排索引)。对于被检索的HashCode, 也是分红一个个单词,去找哪些文档里面包含这些单词,按包含单词的多少返回检索结果。sql
LSH的基本思想是:将原始数据空间中的两个相邻数据点经过相同的映射或投影变换(projection)后,这两个数据点在新的数据空间中仍然相邻的几率很大,而不相邻的数据点被映射到同一个桶的几率很小。也就是说,若是咱们对原始数据进行一些hash映射后,咱们但愿原先相邻的两个数据可以被hash到相同的桶内,具备相同的桶号。对原始数据集合中全部的数据都进行hash映射后,咱们就获得了一个hash table,这些原始数据集被分散到了hash table的桶内,每一个桶会落入一些原始数据,属于同一个桶内的数据就有很大多是相邻的,固然也存在不相邻的数据被hash到了同一个桶内。所以,若是咱们可以找到这样一些hash functions,使得通过它们的哈希映射变换后,原始空间中相邻的数据落入相同的桶内的话,那么咱们在该数据集合中进行近邻查找就变得容易了,咱们只须要将查询数据进行哈希映射获得其桶号,而后取出该桶号对应桶内的全部数据,再进行线性匹配便可查找到与查询数据相邻的数据。换句话说,咱们经过hash function映射变换操做,将原始数据集合分红了多个子集合,而每一个子集合中的数据间是相邻的且该子集合中的元素个数较小,所以将一个在超大集合内查找相邻元素的问题转化为了在一个很小的集合内查找相邻元素的问题,显然计算量降低了不少。
参考 : https://blog.csdn.net/liuheng0111/article/details/52292457
细节:图片提取的特征有4096个维度, 每一个维度是一个浮点数,对于每一个维度,在不作降维处理以前, 每一个维度会对应产生3个字符长度的局部敏感HashCode, 因此一个特征生成的局部敏感HashCode长度为4096*3。可是HashCode做为检索项,若是太长了会影响检索速度,所以做了降维处理, 去除一些冗余的维度后,计算出来的HashCode总长在176个字符左右。
模型的方法相似。
7. 大家这个项目还有哪些能够改进的地方(主键设置不合理, 怎么设置)?
设置数据库主键,除了用自增的序列之外,还能够用UUID(UUID 是 通用惟一识别码(Universally Unique Identifier))
第一期的方案是Solr + MySQL, 缺点主要是每次更新须要从新导入MySQL数据,不得不停机更新;
改用ElasticSearch, 能够不适用数据库,直接插入JSON格式数据创建索引。只在持久化的时候使用MySQL.
8. 知道网络编程吗?了解网络IO模型吗?讲一讲IO多路复用
9. redis了解吗?你提到了redis的缓存替换策略, allkeys lru 替换策略中的 LRU(Least Recently Used)算法的原理是什么? 不知道? 那若是让你设计,应该怎么设计?
10. 若是让你设计一个数据库,实现增删该查这些功能, 有什么注意事项?
11. 讲一讲多线程编程?
数据库的知识问了不少
针对项目问了不少
必定必定必定要了解项目的全部细节!
HashMap的底层原理,以及如何优化HashMap的查找效率?(HashMap怎么提升 解决Hash冲突的效率?)
MySQL数据库的索引,为何用B+树不用B树?
数据库的隔离级别, 以及MySQL的默认隔离级别?
Redis经常使用的数据结构有哪些?(做死把redis往上写,结果连这个都说不全,面试以前须要认真检查简历上所写的一切,保证你能回答上跟简历上所写的任何一个点的中等难度左右的问题)
IO网络模型有哪些?说一说多路复用IO?
线程和进程有哪些区别?
TCP/UDP 的区别
三次挥手、四次握手
JAVA有哪些锁?
悲观锁和乐观锁的区别?
实现乐观锁的CAS方法,具体是怎么作的?这么作有什么问题?
来作一个题:
给你k个有序数组,请排成一个有序数组
先答归并,问时间复杂度。
提示能够用堆, 再问时间复杂度, 现场编程。
你有什么问题问我吗?
怎么提升我这弱鸡的代码能力?
多练习,多写,多总结;
怎么读源码,大家工做上常常读源码吗?
看你的目的,是为了解决工做上的需求就读某一个点; Debug源码;
1. String, StringBuider, StringBuffer的区别, StringBuider和StringBuffer为何是可变的,他们哪一个是线程安全的;
2. CurrentHashMap介绍一下;ArrayList的线程安全版本是什么了解过吗?
3. Sychronized关键字加在类、方法和代码块上的区别是什么?
4. JUC java并发包;
5. MySQL有哪些引擎,介绍一下他们的区别;介绍一下B+树;
6. 介绍一下redis,以及为何要用redis;
7. 你的论文是哪一个期刊?
8. 代码题考的是二叉树的镜像。
9. Object类有哪些方法:
hashcode, equals, getClass, toString,wait, notify, notifyAll, finalize, clone方法
多线程
数据库
计网
搜索框架
代码托管
代码加试:
详细的问了项目,三维模型检索这块;整个的流程是怎么作的,去重是怎么作的,检索的效果怎么样;
论文, 论文总体是怎么作的,论文的算法(特征融合后的方法)放到三维模型检索系统里面去的效果又怎么样的提高;
你不是科班的,你以为你作coding的优点和劣势有哪些?
劣势是没有学过计算机的不少专业课,但劣势能够转为优点:如今有目的的去学,能理解更深;
你目前拿了哪些OFFER?
你能实习多久?
问题问的比较常规,如今记不太清了,有印象的是讲了redis的两种数据持久化的方式: RDB快照和AOF;问了JAVA线程池的核心参数, threadlocal 变量; 问了数据库出现并发修改怎么办;
而后考了两道编程题:
一、用数组实现固定容量的队列,实现put函数和take函数
这一题在面试官的提醒下,用count记录队列长度的方法下,写出了以下代码:
两个功能测试正常
二、寻找矩阵的最长上升路径长度:
1 2 3 4 5 6
1 1 1 1 1 3
3 4 1 2 3 4
最长上升路径长度为6
解法是枚举每一个起点作深搜,可是递归出口老写不对,截至面试结束调试的结果仍然不正确。下面的代码有问题
1. 说一下java的集合,若是想要有序的取出元素怎么作(TreeSet)?
2. 数据库,隔离级别,索引
3. JAVA 虚拟机, GC的过程,GC的算法有哪些。
5. ThreadLocal的原理,ThreadLocal存的变量必定是线程隔离的吗?
6. linux命令, 如何在日志中定位error?
7. 算法题,给定一个数组,除了两个数字只出现了一次, 其余的数字都出现了两次,请找出这两个数字。(剑指OFFER原题)
1. 写出访问www.lbs.tencent.com 通过的信息传输过程;
2. 写出线程的状态以及各个状态的互相转换条件;
3. 阐述Dijstra算法并写出代码;
4. 股票交易,给出一段时间的股票价格,肯定最佳买入时间和最佳卖出时间,以及最大获利
5. 财主有一根能够折断的金条,财主雇了长工给他干活七天,财主用这根金条做为长工的工资。财主必须用金条日结长工的工资。问金条最少折断多少次,能够知足支付的要求。
面试:
0. Dijstra算法有什么缺陷不足之处?
1. 100G的硬盘上的整数型数据, 1G的内存。找出这100G数据里面全部不重复的数据。最少须要多大的辅助内存。
解法1:位图
int型的整数一共有232个,咱们申请232 bits, 也就是232位, 用1位表示一个数是否出现了,0表示未出现,1表示出现了。好比4出现了,咱们将这232位的第4位置为1。10000出现了则把第10000位置为1。这样232 bits = 232/8 = 229B, 咱们知道210约等于1000, 230约等于109。故229 B = 2-1 * 109 B = 2-1 * 1GB = 500MB
;
拓展
若是用两位表示数出现的次数就能够分别统计出现0次、出现1次、出现2次和出现屡次的数字。00表示未出现,01表示出现1次,10表示出现两次,11表示两次以上。而后扫描100亿个数,查看位图中对应的位置,若是是00,01,10,则加1变成01,10,11;若是是11,则不变。最后再扫描一遍位图,输出01,10对应的数。 2^32 * 2 = 8Gbits = 1GB。
那么这样作的状况下怎样找到这个数呢?我举个例子,例如咱们此时读入一个数是:64,64对应的所在bit位是:64*2=128,也就是说第 127 和 128 位共同
标示了它的出现状态。其余的以此类推。每当咱们读出一个数,咱们就这样去找到它对应的bit位,先读出bit位的值,再作记录,已是01的,再次来到,那么
就应该修改成10。最后的咱们这样得出结果:扫描整个位图,若是是10的,就下标/2得出这个数。解法2:外排序,相似mapreduce的方法
2. 布隆过滤器有什么做用? 他有什么缺陷?
3. 1000杯水一杯水有毒,小老鼠喝了有毒的水一周后毒发身亡。小老鼠数量不限,如何最快找出这杯有毒的水。
4. 一个形状不规则的杯子装5L水,一个形状不规则杯子可装7L水。如何量出6L的水?
5. HashMap是怎么实现的?初始容量是多少?何时会扩容?
6. 什么是幂等性
7. Java Web的几大域?
8. Session与Cookie的区别;
9. TCP为何是三次握手?什么叫信息对等?
10. 进程间通讯的方式有哪几种? 共享内存怎么实现?
11. MySQL左链接和右链接有什么区别?
12. MySQL索引失效条件有哪些?
13. 一条语句执行很慢,怎么作MySQL查询优化?
1. 讲一下实习的项目架构
2. 多我的同时点击下载按钮怎么办?
2. CountDownLatch怎么用的,若是latch里面有一个线程阻塞了怎么办?
3. 线程池的核心参数解释一下?
4. 线程池的拒绝策略有哪些?
5. 了解Java的内存模型吗?讲一下内存模型,GC?
6. 垃圾回收器CMS 和G1有什么区别?
https://www.cnblogs.com/greatLong/articles/11450753.html
7. 传统的IO和NIO有什么区别?
1. NIO 须要补
2. CMS和G1
3. 比较爱考实际场景的解决方案
1. FreeWheel 对各地提供服务,若是客户发现某地的服务不可用,怎么排查和定位问题?
2. 什么是NAT? 他是为了解决什么问题提出来的?
IP地址只有32位,满打满算只有42.9亿个地址,还要去掉保留地址、组播地址,能用得只有36亿左右,IPv4很早就被列强瓜分完毕,感谢有NAT这项技术苦苦支撑,咱们还能够继续在互联网遨游。
公司局域网、机构局域网、我的局域网可使用私网IPv4地址(10.0.0.0/8,172.16.0.0/12,192.168.0.0/16),而后在各个局域网的边界WAN口使用一个或多个公网IPv4进行一对多的转换。
若是是一对一转换,那压根节省不了IPv4地址空间;因此通常NAT都是一对多的,即一个公网IPv4映射多个私网IPv4,那问题来了,NAT设备如何区分不一样的私网IPv4的host呢?
NAT使用基于session 转换规则:
对于TCP/UDP使用
Host's私有IPV4+Port <------->NAT公网IPV4+Port
对于ICMP使用Host's 私有IPv4+session ID<----->NAT公网IPv4+session ID
规则其实很是好理解,因为session ID在NAT设备上是独一无二的,因此NAT能够很容易区别局域网内部的不一样host。
至于其它传输协议,NAT使用的也是相似session ID的转换规则,即便用能够将不一样host 轻易分辨出来的字段作键值(KEY),动态建立映射表项,作双向的地址+KEY的转换。
3. 阐述5个HTTP的方法,并讲述他们在RESTful中的...(忘了)?
经常使用的5个方法是DG3P(Delete, Get, Post, Put, Patch)
4. 简述系统调用,什么是系统调用?
每一个进程的虚拟地址空间能够划分为两个部分:用户空间和内核空间。在用户态下只能访问用户空间;而在核心态下,既能够访问用户空间,又能够访问内核空间。系统调用是在内核完成的。
6. 什么是虚拟内存,虚拟内存有什么做用?
从概念上来讲,虚拟内存被组织成为一个由存放在磁盘上的 N 个连续的字节大小的单元组成的数组,也就是字节数组。每一个字节都有一个惟一的虚拟地址做为数组的索引。磁盘上活动的数组内容被缓存在主存中。在存储器结构中,较低层次上的磁盘的数据被分割成块,这些块做为和较高层次的主存之间的传输单元。主存做为虚拟内存的缓存。
5. 简述数据库ACID的含义?
6. 一个score数据表,有学生ID, 科目, score三个字段, 输出全部score相同的字段?
MySQL中,查询表(dat_bill_2018_11)中字段(product_id)值重复的记录:
SELECT product_id, COUNT(*) AS sumCount FROM dat_bill_201811 GROUP BY product_id HAVING sumCount > 1;说明:先用GROUP BY 对 product_id 进行分组,同时使用COUNT(*)进行统计,再用HAVING来过滤大于1的,这样查找出来的就是重复的记录了。
7. 编程题:
给定一个数组[7,6,4,2,10,8], 一个整数m。把这个数组分红m个子数组,每一个子数组统计其和。把全部子数组和的最大值做为该分隔方案的值,输出全部分隔方案里面的最小值。
如[7,6,2,10,8]分隔成两个子数组,分红[7,6,2], [10, 8]时是全部分隔方案里子数组和的最大值最小的方案,输出18。
8. 算法题,抽象起来,是有一棵树(多叉树),而后给定这棵树的两个节点,找出这两个节点的最近公共祖先。
9. 系统设计题:
1) 如何设计一个系通通计广告播放次数;
2) 广告播放模块和频次统计模块如何通讯
3) 若是服务器在不一样国家(如美国、欧洲),怎么保证系统的高并发高可用。
面试题:
1. leetcode brick walls;
2. leetcode 410
3. 随着系统的更新,linux的/boot空间下积攒了愈来愈多的旧的内核文件,如何删除这些旧的内核文件?
4. 数据库问了一些不太深的东西,redis和Mysql 的区别与联系。
1. 手写SQL没有写对
2. 问了下CDN网络,不知道
3. leetcode的题不太难,但没有提供出最有解,须要多刷题。
1. 讲下Java线程池,何时会用到线程池(降一个场景)?
2. 围绕着流量导出项目问:
1) 你的导出过程用了子线程countDownLatch, 若是有一个子线程挂了怎么办?
await()设定等待时间
2) 若是await超时返回了或者抛出异常了怎么办?怎么排查?排查出缘由怎么恢复?
3) 若是数据量很大,你怎么加快导出速度?
4)给你一台服务器,8核,最多能开几个线程?
不知道
对于32位系统来讲,没有配置3GB用户内存模式的状况下,用户地址空间可用内存是2GB-128KB,内核可用内存是2GB。开启之后,用户地址空间可用内存是3GB-128KB
理论上,一个用户进程最大能够分配的内存是2G(实际能用的大约为1.5G),一个线程栈须要预留1M内存空间,那么理论数据:32位电脑每一个进程最多能够开2*1024/1=2048个线程,即2000个左右线程。线程是好东西,可是不能滥用,由于像在windows系统下,系统是抢占式的,线程多了,系统在线程间切换也要花费很是多时间和资源。
默认状况下,一个线程的栈要预留1M的内存空间
而一个进程中可用的内存空间只有2G,因此理论上一个进程中最多能够开2048个线程
可是内存固然不可能彻底拿来做线程的栈,因此实际数目要比这个值要小。
你也能够经过链接时修改默认栈大小,将其改的比较小,这样就能够多开一些线程。
如将默认栈的大小改为512K,这样理论上最多就能够开4096个线程。即便物理内存再大,一个进程中能够起的线程总要受到2GB这个内存空间的限制。
比方说你的机器装了64GB物理内存,但每一个进程的内存空间仍是4GB,其中用户态可用的仍是2GB。
若是是同一台机器内的话,能起多少线程也是受内存限制的。每一个线程对象都要站用非页面内存,而非页面内存也是有限的,当非页面内存被耗尽时,也就没法建立线程了。
若是物理内存很是大,同一台机器内能够跑的线程数目的限制值会愈来愈大。在Windows下写个程序,一个进程Fork出2000个左右线程就会异常退出了,为何?
这个问题的产生是由于windows32位系统,一个进程所能使用的最大虚拟内存为2G,而一个线程的默认线程栈StackSize为1024K(1M),这样当线程数量逼近2000时,2000*1024K=2G(大约),内存资源就至关于耗尽。
5) 假设能开10个线程,要多少轮次才能导完1000万条记录?
6) 你说分库分表,那么一张MySQL表最多存多少数据?
6.5) 你的导出的各个小的表的数据怎么merge的?
7) 好的给你加机器,你这个分布式的导出系统有几个模块?
8) 怎么保证导出数据的实时性?(导出的时候数据不能再写到这个库了,那导出期间的数据怎么办?)
读写分离,从库导出主库写入,记录导出阶段的新数据
9) MySQL的事务是怎么实现的?
1. 对迁移能力要求比较高,须要对具体场景提出相应的解决方案。须要经过多看大数据、高并发场景的设计方案来提升本身。
2. 对MySQL须要全面的学习和掌握,本次面试的MVCC, 事务的实现方法没有很好的掌握,单表最大容量等。
介绍项目经历
1. 项目细节
若是你的服务挂了怎么还原?
若是多人同时访问你的服务怎么处理?
2. 计算机网络方面的知识
tcp, udp 拥塞控制的原理,怎么实现的。
代码题:最大连续子序列和
1. 实验室项目经历
2. 实习项目经历问的比较少
代码题
字符串中回文字符串的数目
1. 挑你以为最有收获的项目经历讲一讲
2. 为何你以为第二段实习经历更有收获
3. 你但愿你的工做环境是什么样的?
4. 写个题: 反转链表
5. 你对你应聘的这个岗位有什么理解?
讲项目架构。
若是你的redis分布式锁发生死锁了怎么办?
setnx加锁 del解锁 expire设置超时时间 set(key, value, nx, time)可让setnx和 设置超时时间变成原子的。
服务挂了怎么恢复?
Java 集合类有哪些, list set map哪一个是顶层接口? set的实现有哪些? ArrayList和linkedlist的区别是什么, 看过源码吗? 建议看一下源码。
String 类哪些方法是final的? 建议看一下源码?
线程池, 若是有新任务来了,在线程池有空余线程的状况下,是先进workque再出队列去取线程池取线程, 仍是直接去线程池取线程?
http://www.javashuo.com/article/p-phymxbpm-dr.html
写了个简单的题:
一个链表 绝对值有序,请将其排序。
-1 -> 2 -> -3 -> 4 -> -5
最终输出为
-5 -> -3 -> -1 -> 2 -> 4
算法题
0 1 5 6
2 4 7 12
3 8 11 13
9 10 14 15
按0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 的顺序打印这个矩阵。
线程和进程的区别。
问了 卡特兰数 n辆车进站,问有多少种出站顺序
1. 项目经历
2. 查看某个磁盘下哪一个文件夹占用比较多用什么命令
使用df -h查看磁盘空间占用状况
使用sudo du -s -h /* | sort -nr命令查看目录占用空间
du的功能: `du` reports the amount of disk space used by the specified files and for each subdirectory (of directory arguments). with no arguments,`du` reports the disk space for the current directory。很明显,与df不一样,它用来查看文件或目录所占用的磁盘空间的大小。2、du经常使用的选项:-h:以人类可读的方式显示-a:显示目录占用的磁盘空间大小,还要显示其下目录和文件占用磁盘空间的大小-s:显示目录占用的磁盘空间大小,不要显示其下子目录和文件占用的磁盘空间大小-c:显示几个目录或文件占用的磁盘空间大小,还要统计它们的总和
3. 一个磁盘明明还有空余但却不能建立新文件,为何
4. 写个SQL语句: SQL从成绩表中找出排名前三的学生信息(一个学生可能有多门课的成绩)
SELECT name from a GROUP BY name ORDER BY sum(fenshu) DESC LIMIT 0,3 ;
5. 查看网络端口用什么命令
6. 面向对象编程的特色
7. 你怎么理解面向接口编程
8. tcp三次握手会产生哪些数据包
9. 每一个数据包会交换哪些信息
10. 一个tcp能够支持多少个http链接
11. 算法题: 对两个有序链表排序
1. 项目经历
2. 算法题: 找出一个数组中第三大的数组(数组有重复数字),若是不存在第三大的数组返回-1
3. 智力题: 36匹马, 6条跑道, 怎样用最少的比赛次数找出跑的最快的前3匹马
4. 聊天
1. 怎么样中断线程
来源
http://www.javashuo.com/article/p-evhnncda-du.html
http://www.javashuo.com/article/p-qefvdcrz-dw.html
1. Thread.stop()方法:
该方法已经被弃用(a.会当即中止run方法全部工做,报错catch finnally语句,致使清理工做没法完成; b. 会当即释放该线程持有地全部地锁,出现线程不一样步的问题。)
来源 http://www.javashuo.com/article/p-aogzwxzn-dy.html
a. 对正常运行中的线程,interrupt() 方法仅仅是在当前线程中打一个中止的标记(Thread.interrupted()方法返回中断标志位的状态而且清除中断标志位, Thread.IsInterrupted()方法返回中断标志位而且不清除中断标志位),并非真的中止线程,须要由目标线程自行根据标记来决定如何处理中断;
b. 对于处在阻塞态的线程,因为代码阻塞没法检查中断标志位,对该线程对象调用interrupt()方法会使得其抛出一个InterruptedException。
3. 使用人为设置的标志位终止线程(共享变量)
在 run() 方法执行完毕后,该线程就终止了。能够设置的一个标志位循环检查该标志位来决定是否退出循环。
2. AtomicInteger怎么保证原子性的
3. 用interrupt中断线程有什么很差的地方
4. GC的过程, 什么样的对象能够做GC root使用?
4.1 部署JVM项目有哪些虚拟机参数能够调?
5. HashMap 怎么实现的
6. 若是我本身定义了一个类做为HashMap的key应该注意些什么(重写HashCode), 为何?
7. 重写equals方法要注意些什么
8. 一个类里面有两处代码,一个方法加了方法锁,一个代码块使用Object对象加了锁。这两个代码都操做一个int型的变量, 怎么保证线程安全
9. 编译型语言和解释型语言有什么区别?(强类型、弱类型)
写了两道算法题:
a. 河滩上有两堆石子,一堆红色一堆蓝色,怎么把全部的红色石子放到蓝色的前面?
红色石子设为1, 蓝色石子设为0, 排成一列的石子中,将全部的1放到0前面。
b. 用快排写topK
说一下数据库的锁机制
redis做分布式锁是怎么实现的
说一下死锁
说一下GC
知道Spring 的AOP吗?
知道 RPC吗?
代码题:
逆时针打印矩阵
1. 对本身前面的面试表现比较满意的有哪些,不太满意的有哪些?
2. 平时本身怎么学习的? 有写博客?博客地址发我看看。
3. 用过kafka吗?
4. 介绍项目
1. 知道redis setnx底层的机制吗
2. 方法区在哪, 元数据区保存的是什么?
3. set(key, value, nx, time)有没有其余问题。
有。若是某些缘由致使线程B执行的很慢很慢,过了30秒都没执行完,这时候锁过时自动释放,线程B获得了锁。随后,线程A执行完了任务,线程A接着执行del指令来释放锁。但这时候线程B还没执行完,线程A实际上删除的是线程B加的锁。
解决:
能够在del释放锁以前作一个判断,验证当前的锁是否是本身加的锁。
至于具体的实现,能够在加锁的时候把当前的线程ID当作value,并在删除以前验证key对应的value是否是本身线程的ID。
4. 给定一个数字字符串,判断他可能的合法的IP方案。leetcode 95
5.卫语句
http://www.javashuo.com/article/p-atckhpef-ec.html
函数中的条件逻辑令人难以看清正常的分支执行路径。使用卫语句表现全部特殊状况。
所谓卫语句,若是某个条件极其罕见,就应该单独检查该条件,并在该条件为真时马上从函数中返回。这样的单独检查经常被称为“卫语句”。
6. CMS垃圾回收器垃圾回收有几个阶段?(G1有哪些阶段?)
0. 问了下项目经历,你这个项目有哪些技术难点?
1. 线程池的核心参数
2. 了解cachedThreadPool吗
3. Redis为何QPS高?
4. Linux怎么查看日志的行数
sed -n '$=' 文件名
cat 文件名 | wc -l
wc -l 文件名
5. 软链接和硬连接有什么区别
在Linux的文件系统中,保存在磁盘分区中的文件无论是什么类型都给它分配一个编号,称为索引节点号inode 。
软链接,其实就是新创建一个文件,这个文件就是专门用来指向别的文件的(那就和windows 下的快捷方式的那个文件有很接近的意味)。软连接产生的是一个新的文件,但这个文件的做用就是专门指向某个文件的,删了这个软链接文件,那就等于不须要这个链接,和原来的存在的实体原文件没有任何关系,但删除原来的文件,则相应的软链接不可用(cat那个软连接文件,则提示“没有该文件或目录“)
- 硬链接是不会创建inode的,他只是在文件原来的inode link count域再增长1而已,也所以硬连接是不能够跨越文件系统的。相反是软链接会从新创建一个inode,固然inode的结构跟其余的不同,他只是一个指明源文件的字符串信息。一旦删除源文件,那么软链接将变得毫无心义。而硬连接删除的时候,系统调用会检查inode link count的数值,若是他大于等于1,那么inode不会被回收。所以文件的内容不会被删除。
- 硬连接其实是为文件建一个别名,连接文件和原文件其实是同一个文件。能够经过ls -i来查看一下,这两个文件的inode号是同一个,说明它们是同一个文件;而软连接创建的是一个指向,即连接文件内的内容是指向原文件的指针,它们是两个文件。
- 软连接能够跨文件系统,硬连接不能够;
- 软连接能够对一个不存在的文件名(filename)进行连接(固然此时若是你vi这个软连接文件,linux会自动新建一个文件名为filename的文件),硬连接不能够(其文件必须存在,inode必须存在);
- 软连接能够对目录进行链接,硬连接不能够。
- 两种连接均可以经过命令 ln 来建立。ln 默认建立的是硬连接。
使用 -s 开关能够建立软连接。
6. 代码题:
对stack里面的数排序,能够用辅助栈,不能用其余数据结构
7.代码题:
对链表的给定区间翻转
用过mybatis? foreach标签有什么用?
Java IO了解吗?
HashMap key为null会被放到哪?
单索引和联合索引的区别?
怎么优化一条运行的很慢的SQL语句?
为何%like不走索引?
Sychronized 和 Lock 有什么区别?
ConcurrentHashMap 怎么实现线程安全的? 内部分段分了几段?
线程有哪些状态?
线程的这些状态之间的转换用什么函数?
怎么开启一个新线程?
继承Thread和实现Runnable接口有什么区别?
ArrayList底层是怎么实现的?
1. 说下JVM内存模型
2. 程序计数器是怎么工做的?
3. CMS的几个工做阶段
4. JVM中多个线程同时申请堆上的内存,会不会出现冲突
5. Sychronized关键字和Lock有什么区别?
6. ReentrenLock和Sychronized关键字有什么区别?
7. 线程池的工做原理, workque的类型
8. 计算机网络的七层模型的做用分别是什么?
9. 写一个最大堆
前一面的面试官都问了你什么?
写一个单例模式.