9. 无序数组ab,每个数组有一次循环遍历的机会,找出a有b没有的数字(不能使用外部东西)
,你可以看看哦。网址:另外,我的微信公众号 ninechapter 中还有很多前辈们分享的面试经验,你有兴趣可以加一下,希望对你有帮助。
在投递了阿里实习生招聘的简历后大概3天,下午两点多,正在宿舍吹牛逼的时候接到了
我说自己是XXX 学校XXX 专业的学生,以前主要做Java 方向的东西,主要的项目经验在
Web 的服务端上,然后有过一些项目经验。好像就说了这一句话,然后我的自我介绍就完
了。说和没说一样.其实自我介绍作用不是很大,就是为了暖暖场,不至于让你很紧张,自
问:你知道HashMap 和HashTable 吧,给我介绍介绍他们俩的区别。
答:首先是Hash 算法,HashMap 其实本质里面是一个数组,初始化长度为16.然后你
来hashcode ,然后根据映射关系,将hashcode 的数值对应到数组的下标上。也
就是说hash 值就是他的数组的存储位置。如果出现hash 冲突,那么就顺延到下
一个位置,看看是不是空余的。以此类推。对于key 重复的情况下,他的value
答:可以使用ConcurrentHashMap.它允许多个修改操作并发进行,关键在于使用了
实就是一个小的hashtable,它们都有自己的锁,只要多个操作发生在不同的段
答:可以指定,也可以不指定。不指定默认长度为16.但是如果put 的的数目超过12的
时候,就会触发resize 操作。resize 的操作代价是非常高昂的,不仅需要扩容,
而且以前的key 都需要重新计算hash 保证散列的均匀性。这样频繁的resize 对
答: 一种是覆盖,一种就是同样的方法名但是参数不同。举一个例子吧, 比如
答:我觉得应该是动态方法绑定。在你初始化new 的时候,到底对应于什么类,是在
JVM 运行的时候才指定的。(PS:其实这里我很虚,这个问题知识听说过,但是没
答:首先JVM 分为堆区和栈区,还有方法区和PC 等,但是主要的就是堆和栈。我们
所有初始化的对象都是放在堆里面。堆分为新生代和老生代,初始化的对象都在新
生代的Eden 区域,当经过一次或多次GC 后,存活下来的对象会被移动到老年
区。当JVM 内存不够用的时候,会触发Full GC,清理JVM 的老年区。
答:对于新生代,当进行GC 的时候,HotSpot 一般是将存活的对象放到新生代和
Survive 区,新生代一共两个Survive 区。先把存活的对象放到其中一个Survice
片,因此一般会把Eden 进行完全的清理,然后整理内存。那么下次GC 的时候,
就会使用下一个Survive,这样循环使用。如果有特别大的对象,新生代放不下,
就会使用老年代的担保,直接放到老年代里面。因为JVM 认为,一般大对象的存
答:我知道一个普通的叫CMS,好像叫并行标记清理。貌似现在JDK8正在使用一种新
答:当JVM 在需要清理垃圾的时候,他需要先标记需要清理的垃圾,在标记完成清理
的时候,这时候JVM 是不能创建新的或者使用对象的,因为这样会导致原来标记
的垃圾发生变化,因此这里进行GC 清理的时候,除了垃圾回收其他什么都不动,
答:一般会采用引用计数标记法。就是一旦一个对象有其他的对象去引用他,就给他得
引用数加一,当一个对象引用技术为0的时候,那么就该清理了。这样带来的一个
问题就是,比如A 对象引用B 对象,B 对象引用A 对象,没有其他的对象引用他
们,那么使用上面那么办法就不能清理A,B,但是他们确实已经是垃圾了。现在
使用GC Root,从所有对象的根,root 开始遍历,只要都在引用树上的对象都是
有效对象,不能被遍历到的就是垃圾,这样就能解决刚才说道的A,B 对象互相引
问:讲一讲你做的项目吧,我看你简历上貌似写了一个XXX 平台的开发,你给我说说
答:首先这个平台使用Spring 作为整个模块的流程控制,使用Spring mvc 实现
由于网页的首页查看次数非常多,很多数据都是反复的从数据库中获取,这样每一
个用户都发一次SQL,效率很低,因此我引用了Memcached 作为缓存层。将最
常展示的信息放到memcache 上,这样每次查询直接从memcache 上获取就
答:一般使用Spring 都会配置一个Spring.xml,在那里面声明需要被管理的类。比如
象,然后使用类似@autoWired 这样的标签把spring 容器里面的对象赋值给对应
答:切面编程嘛。就是类似在执行一个方法前,动态的指定执行另外的一个方法,然后
或者在之后再执行一个方法。类似于Junit 里面的@before 和@after。
方法,在method 里面调用invoke 方法,然后在这个之前执行你想执行的代码,
答:一个类,首先初始化它里面生命的private static 的属性,然后执行对应的static
静态代码块,然后初始化private 里面的属性,再执行构造函数。然后就OK 了
答:我恍然大悟,抱歉抱歉,说懵了。忘了父类的,执行构造函数的时候,先初始化他
对方一阵苦笑,说杭州天气也一般般,然后说差不多都这样,我就呵呵了。然后对方问我啥
时候可以去实习,我说得暑假可以吗,对方说没问题,然后就结束了第一轮漫长的面试,时
第一轮是下午2点半开始,然后经过了一番洗礼,口干舌燥的我回宿舍小憩一下,直到五点
起床准备去吃饭,正当我在食堂刚点完小炒,吃了没一半,又来一个0755的电话,我满嘴
米饭的接电话,对方还问我,现在方便接电话吗。我说正吃饭呢,他呵呵笑了一下,说他还
没吃。然后说他接到同事给他发过来的简历,对我进行第二轮面试。我当时心里想,这也太
然后就是问你项目经验。我还是在那里介绍我原来的那个XXX 平台的架构,算是又重复了
一遍吧。然后这个哥们又问了我Spring 的IOC 原理和APO 原理,几乎和第一轮的哥们问
又经Spring 聊到了JVM,然后就JVM 的那一堆内存分配和内存管理和回收又扯了一遍。
重头戏来了,经过我的项目介绍,他听说用了memcache,然后就问我,你的memcache
我当时就懵了,因为我用的memcache 就是单节点啊,一个节点能用还不行啊,怎么那么
复杂啦。然后我就实话实说,根本没有什么集群,就是一个简单的节点,然后那哥们不依不
还真别说,虽然我没有配置过集群,但是hash 一致性我是真看过啊。当年为了吹牛逼可没
少费劲啊。然后我就说,hash 一致性就是为了保证每次set 到memcache 里面的数据在需
要get 的时候能从正确的对应节点拿出来。然后一个好的hash 一致性算法是能保证各个节
点的存储的数据是平衡的,不会出现一个节点存储的数据非常多而其他的数据存储的非常少
使用LRU 算法,就是那个响当当的最近最不常使用算法。当内存满的时候,就把最近最不
常使用的数据从内存中移动出去,给新来的数据腾出来空间,Thats all。
memcache 仅仅是将数据存放在内存中,而redis 是可以写入到磁盘的。当掉电的时候,
memcache 的存储数据是全部丢失的,而redis 因为是写入到磁盘的,所以可以掉电不丢
失数据。还有redis 里面有内置的数据结构,比如list 啦map 啦等等,可以很方便的使用
默认的数据结构进行数据的管理插入啥玩意的。特别是在实现消息队列的时候特别爽,能很
MongoDB 是非关系形数据,而Mysql 是关系型数据库。我个人目前写项目的时候非常喜
欢非关系型数据库,因为比如当在开发中你的数据结构发生变化的时候,非关系型数据库可
以非常方便的修改attribute 而关系型数据库就得修改表结构,那么以前的数据都会成为脏
数据,非常的悲剧。而且对于多对多的关系类型,使用非关系型数据库,逻辑会非常简单,
我说杭州空气好啊,美女多啊,北京压力大啊,混不下去啊,我期望小桥流水啊,巴拉巴
2015.3.16,不知道为啥,研发的面试需要四轮电面,我面试测试的童鞋三轮就HR 了,看
样子研发果然待遇更牛逼啊。苦苦等了将近一个周,当我正在地铁上准备去市里逍遥的时
候,0755又来电话了,问我要了QQ 号说晚上五点面试。挂了电话后,我那个忐忑啊,给
QQ 号啥意思,分明就是要视频面试啊,会不会让我当面打开Eclipse 写算法啊,完了完了
完了。我算法可是一坨渣渣啊。当时想放弃的心都有了。哪一个下午是我最难熬的下午,我
在那里复习DFS,BFS,什么快排,又在那里看Leetcode 的题目,乱七八糟看了不少但是
估计都没记住,心想反正挂了就挂了吧。等到五点多打开QQ 开始面试的时候,起初又是,
因为当时去的是一家手游公司,我就在那里说,客户端和服务端是通过Mina 进行消息通
信,然后后台通过比特字节流获得了信息后解析,然后通过消息号传递给对应的Handler
处理,Hnadler 在调用service 处理,所有的人物信息都最终放在了MongoDB 里面,然
游戏经常有各种活动,说不定就得出来一个什么新玩意,使用MongoDB 可以随心所欲的
增加attribute,怎一个爽字了得。关系型数据库一般分表,一次分100个表,根据游戏ID
我就不说了,不过这个面试官给我用视频看了看杭州外面的天气,感觉确实是灰蒙蒙的。然
后那个们问我啥时候去,阿里楼下有一家不错的小龙虾店,啥时候去,他请客吃饭。
第三轮就这样完了,无语。我还以为得写算法呢,Eclipse 都打开了,吓尿了。结果最后就
是聊天说实习啊,那为啥用QQ 啊,百思不得其解啊。不过这好像也说明了,实习貌似还是
OK,到此为止全部的面试经历就说完了,上面有很多问题都是我自己回答的原话,可能有
下面我会尽量描述流程以及大致的面试题目大纲,希望对想要跳槽、正在面试的同学带来点灵感,帮助可能谈不上,但启发还是能有。
在推荐一周之后收到了杭州打来的电话,说来也巧,那时候我正在机场候机,距离登记还有大概一个小时,心想时间肯定够了。
那是我时隔一年多第一次面试,还是在机场这样嘈杂的环境里。多多少少还是有些紧张。
我觉得我在 XX 做的不错,用了 XX 需求实现 XX 功能,性能提高了 N 倍。
它是依靠动态代理实现的,动态代理又分为 JDK 自身的以及 CGLIB 。。。。
类加载机制,谈到双亲委派模型后会问到哪些违反了双亲委派模型?为什么?为什么要双亲委派?好处是什么?
HashMap 的原理?当谈到线程不安全时自然引申出 ConcurrentHashMap ,它的实现原理?
大概是以上这些,当聊到倒数第二个时我已经登机了。最后不得不提前挂断,结束之前告诉我之后会换一个同事和我沟通,听到这样的回复一面应该是过了,
由于二面的面试官临时有事所以他来替一下。于是我赶紧问他能否把之前答的不好的再说说?的到了肯定的答复后开始了我的表演。
有了第一次的经验这一次自然也轻车熟路,原本感觉一切尽在掌握却被告知需要笔试突然被激醒。
从一个日志文件中根据关键字读取日志,记录出现的次数,最后按照次数排序打印。
而且在沟通过程中体现出你解题的思路,即使最终结果不对,但说不定思考的过程很符合面试官的胃口哦。这也和今年的高考改卷一样;过程正确得高分,只有结果得低分。
这个过程中不会过多强调技术细节,更多的考察软件能,比如团队协作、学习能力等。
大概内容是他在 GitHub 上看到的我,他们的技术总监对我很感兴趣(我都不敢相信我的眼镜),问我想不想来阿里试试。
我对比了 A B 部门的区别发现 B 部门在做的事情上确实更加有诱惑力,之后我表达了有一个面试正在流程中的顾虑;对方表示可以私下和我快速的进行三面,如果一切没问题再交由我自行选择。至少对双方都是一个双赢嘛。
在 JDK1.6 之前称为重量锁,是通过进出对象监视器来实现同步的;1.6 之后做了 XX 优化。。。而
是利用了一个巧妙数据结构实现的,并且加锁解锁是显式的。。。之后又引申到分布式锁,光这块就聊了差不多半个小时。
之后在推荐我的那位大佬的帮助下戏剧般的通过了整个技术轮(真的很感谢他的认可),并且得知这个消息是在我刚好和 A 部门约好视频面试时间之后。
没看错,是我要拒掉一个。这对我来说确实太难了,我压根没想过还有两个机会摆在我面前。
最后凭着个人的爱好以及 B 部门的热情我很不好意思的拒掉了 A 部门。。。
也许这就是乐极生悲吧,我确实猜中了 HR 问的大部分问题,但遗憾的是最终依然没能通过。
说实话当时我是拒绝的,之前经历了将近两个月的时间却没能如愿我内心是崩溃的。
我向联系我的大佬表达了我的想法,他倒觉得我最后被 pass 的原因是个小问题,再尝试的话会有很大的几率通过。
我把这事给朋友说了之后也支持我再试试,反正也没啥损失嘛,而且面试的状态还在。
一定要积极的推销自己,像在 A 部门的三面时,由于基础答得不是很好;所以最后我表达了自己的态度,对工作、技术的积极性。让面试官看到你的潜力值得一个 HC 名额。
面试过程中遇到自己的不会的可以主动提出,切不可不懂装懂,这一问就露馅。可以将面试官引导到自己擅长的领域。比如当时我正好研究了锁,所以和面试官一聊就是半小时这就是加分项。
博客可以记录自己踩过的坑,加深印象,而且在写的过程中可以查漏补缺,最后把整个知识体系巩固的比较牢固,良好的内容还可以得到意想不到的收获,比如我第一次面试的机会。
GitHub 是开发者的一张名片,积极参与开源项目可以和全球大佬头脑风暴,并且在面试过程中绝对是一个加分利器。
面试官一般最后都会问你有什么要问我的?千万不要问一些公司福利待遇之类的问题。可以问下本次面试的表现?还有哪些需要完善的?从而知道自己答得如何也能补全自己。
还有一点:不要在某次面试失利后否定自己,有时真的不是自己能力不行。这个也讲缘分。
我就是个例子,虽然最后没能去成阿里,现在在公司也是一个部门的技术负责人,在我们城市还有个窝,温馨的家,和女朋友一起为想要的生活努力奋斗。
最近有很多小伙伴吃了蚂蚁金服上市的酸柠檬,觉得马爸爸说的福报还是存在的。有人问我,进阿里到底难不难?
但是,本着刨根问底的精神,小天搜索了很多阿里Java开发岗位的招聘信息,把那些通用的常见的技术要求归纳一下,还没来得及做统计,但是下面的这张截图也八九不离十了,大家先将就着看看。
还是等小天统计完所有的内容做更加清晰的图片放出来给大家看吧!这里小天会分享一个系列关于阿里面试的文章,一是为了给各位粉丝朋友一些建议,更是想自己积累着朝这个方向
2.1. 程序计数器(线. 虚拟机栈(线. 本地方法区(线. 堆(Heap-线程共享)-运行时数据区
以上核心知识点的具体内容,我已经整理好了,需要的朋友后台私信“JVM”可免费领取!
JVM 中一次完整的 GC 流程是什么样子的,对象如何晋升到老年代,说说你知道的几种主要的 JVM 参数?
你知道哪几种垃圾收集器,各自的优缺点,重点讲下 cms 和 G1,包括原理,流程,优缺点。
最近原来实习时候的Boss联系我,说他跳槽到了阿里,问我有没有兴趣面一个Java后台开发岗位。
考虑到我只工作了一年,现在去阿里肯定要降薪,因此也没有太强烈的意愿。但出于提升自我的角度考虑,参加了面试。
首先做一个简单的自我介绍,主要包括学校经历和工作经历。我工作经历只有一年,大部分时间都是在做产品设计和UI/UX Design,因此隔着电话都能感受到面试官的shock。
Java基础。自动拆装箱如何实现,String,StringBuffer,StringBuilder的异同以及各自的实现。
由于分布式相关场景我没有接触过,因此面试官一直诱导我去设计实现一个分布式事务。
消息队列使用场景,Kafka的架构以及原理。什么是restful api,和rpc调用有什么区别。单例的几种写法。volatile关键字有什么作用。
以上就是电话面试的大体问题,面试完之后,又发给我三道算法题目,要求我一小时内完成,下面是三道算法题:
翻转一个long类型数字。例如输入123456L,输出654321L。- Leetcode翻转integer的变种。考察能否正确处理溢出的情况。
输入一个double,要求返回与它最接近的.49或.99的数字。例如12.77返回12.99,11.02返回10.99,12.61返回12.49。
有三个线程ABC分别向一个数组中写入a,l,i,要求最终的写入结果形如alialiali...写入次数由A线程决定。
这三道题目做的还比较顺利,第二天面试官又联系我阐述一下第一题和第三题的思路,然后通知我可以参加下一轮了。
首先还是自我介绍。主要是工作后的经历。介绍一下工作一年所在team的产品,我承担了什么职责。
红黑树的结构,时间复杂度是多少,如何计算的什么是CAS操作,如何实现一个自定义锁数据库设计。有一张很大的order表,如何设计能够提升查询效率(同时满足根据买家id和卖家id查询)?
二面也同样是一小时左右,面试过程还算顺利。只是当时我在厦门鼓浪屿的一家小餐馆吃晚饭,周围的嘈杂和闷热使我很烦躁,感觉面试官态度有些傲慢……
ps.一面二面结束后面试官都各种暗示我要疯狂加班能不能接受blabla……
二面结束后的第三天,就收到了现场三面的通知。然而我还在厦门旅行,因此改为了电话面试。
介绍一下你工作一年学习到什么?所在项目的架构是什么样的?UI/UX设计有哪些规范(由于我说我学到了一些UI/UX设计方法,因此面试官就问了)?
对我业余时间做的一些项目做了介绍。你觉得加入阿里你能给阿里带来什么?进入阿里你需要忍受很多困难,需要迎难而上,如果绩效考评拿到差评,你会怎么办?
整个流程从一面到三面结束大约持续了10天左右。总的来说,问题都是预期范围内的,虽然面试过程中问到了一些分布式相关问题,我都没有任何经验,这时候不要放弃,主动说出你的思路,然后在面试官的诱导下,相信你能说出属于的答案。
最后,是我在网上找的一些面试Java程序员必须要掌握的知识点,整理成了一份pdf文档,希望能给大家带来帮助。
十四:面经十五:项目PythonGit计算机磁盘Socket以上就是这份pdf的目录。里面涵括了各个java面试中常见的知识点及试题和面经int和integer的区别>