奇安信Java 1面经

#软件开发笔面经#

6.7北京时间上午10点1面

简单自我介绍,项目介绍

-----------------------------开始问些简单八股(面试题精选)--------------------------

1. synchronized 和 Lock 有什么区别?

  • 首先synchronized是java内置关键字,在jvm层面,Lock是个java类;
  • synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁;
  • synchronized会自动释放锁(a 线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放锁),Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁;
  • 用synchronized关键字的两个线程1和线程2,如果当前线程1获得锁,线程2线程等待。如果线程1阻塞,线程2则会一直等待下去,而Lock锁就不一定会等待下去,如果尝试获取不到锁,线程可以不用一直等待就结束了;
  • synchronized的锁可重入、不可中断、非公平,而Lock锁可重入、可判断、可公平(两者皆可);
  • Lock锁适合大量同步的代码的同步问题,synchronized锁适合代码少量的同步问题。

2. synchronized 和 ReentrantLock 区别是什么?

synchronized是和if、else、for、while一样的关键字,ReentrantLock是类,这是二者的本质区别。既然ReentrantLock是类,那么它就提供了比synchronized更多更灵活的特性,可以被继承、可以有方法、可以有各种各样的类变量,ReentrantLock比synchronized的扩展性体现在几点上: 

  • ReentrantLock可以对获取锁的等待时间进行设置,这样就避免了死锁 
  • ReentrantLock可以获取各种锁的信息
  • ReentrantLock可以灵活地实现多路通知 

另外,二者的锁机制其实也是不一样的:ReentrantLock底层调用的是Unsafe的park方法加锁,synchronized操作的应该是对象头中mark word。

3. 说一下 atomic 的原理?

Atomic包中的类基本的特性就是在多线程环境下,当有多个线程同时对单个(包括基本类型及引用类型)变量进行操作时,具有排他性,即当多个线程同时对该变量的值进行更新时,仅有一个线程能成功,而未成功的线程可以向自旋锁一样,继续尝试,一直等到执行成功。

Atomic系列的类中的核心方法都会调用unsafe类中的几个本地方法。我们需要先知道一个东西就是Unsafe类,全名为:sun.misc.Unsafe,这个类包含了大量的对C代码的操作,包括很多直接内存分配以及原子操作的调用,而它之所以标记为非安全的,是告诉你这个里面大量的方法调用都会存在安全隐患,需要小心使用,否则会导致严重的后果,例如在通过unsafe分配内存的时候,如果自己指定某些区域可能会导致一些类似C++一样的指针越界到其他进程的问题。

------------------结束面试------华丽的分割线-----------------

#软件开发笔面经#
全部评论
实习吗佬
点赞 回复 分享
发布于 2024-07-25 13:05 浙江

相关推荐

早前,我和女朋友完成了一场几乎“互换城市”的结局。明明是奔着“同城未来”而努力,最后却成了“再次异地”。这一年,我一边准备毕业论文,一边反复问自己:我们这么努力,到底图什么?努力到底能不能抵过命运的捉弄?那段时间,我几乎不敢去想未来。签了Offer却被毁约,谈了计划却落了空,我们像是被生活推着走的两个棋子。疲惫、无力,又不甘心。春招时,为了仍能在一个城市,哪怕近一些。两人努力投递超过四百家,她投北京天津,我投深圳广州。可春招的市场环境困难程度超乎想象,可能男生确实在就业市场存在些许优势,有幸拿到了几个中小厂的Offer,但是薪资平台都和秋招签约的那家相差甚远;而她几乎只有一些外包和所谓培训就业机构给的面试,截止五月底,春招仍未获得一个Offer。因此,本抱着先异地工作几年,再决定未来的心思,可谁又能说得清未来是怎样的呢?直到近期,事情有了转机。临近毕业,我抱着试试看的心态问了公司HR:“后续base地还会有调整的可能吗?能调回深圳吗?”没想到,她没有直接拒绝,并询问我想去深圳的意愿如何,然后去和部门做了协调和沟通。很快,她告诉我:“部门也希望深圳这边有同学过来。”然后,我便从北京,调回了深圳总部。🥹 所有起起伏伏、不确定、互换与错过,最终在毕业的这个节点,画上了一个出人意料但温柔的句号。原来很多事不是没有结果,而是它要晚一点来。这二十年的求学生涯,我很努力,也很普通。我跌倒过很多次,也一度被现实推着走,但最终,是那些一次次不放弃、哪怕只是“随口问问”的勇气,让我慢慢找回了主动权。所以今天,我想和学生时代好好地告别。不再是那个害怕错过的人了。从“接受安排”,到“主动出击”,我想这就是成长。告别学生时代的方式,是亲手改写人生的落点未来还会很难,但我相信,先走出去,才有可能走得更远。未至山巅,如何看到更壮丽的风景?再见了,学生时代。谢谢你把我推到今天,也让我终于有力气走向明天。
阿尔伯克基炸鸡分销商:只要拼命的奔赴彼此就总会有机会走到一起的,祝幸福
好好告别我的学生时代
点赞 评论 收藏
分享
06-18 21:31
已编辑
南京航空航天大学 Java
总结:一共半小时,比想象中要长,问了比较多场景题, 面试风格和技术面完全不同。提问环节1.你能否先做一个自我介绍,开始今天的面试?2.你的求职意向中,是否考虑除了网络安全方向外,还会考虑java后端、测试开发等其他岗位?3.问:你是否已经确定要去做测试开发方向的工作,还是同步考虑后端岗位?答:我认为都可以考虑,现在还没有限制得很死,还在探索阶段。4.问:你在找实习时,除了测开岗位外,是否也投递了一些后端岗位?答:其实都有在投递,不会限制得很死,前端后端都会考虑。5.问:你目前是否拿到较为满意的offer,为什么可能会优先考虑我们公司?答:确还有一些offer在流程中,我对贵公司的价值观比较认同,所以可能会优先考虑。6.问:能否分享一个你在硕士期间做的相对满意、有成就感或具有挑战性的项目,包括项目背景、目的、你在其中的工作内容以及满意之处?7.问:在项目推进过程中,有哪些比较满意的点,如果重新来过,有哪些层面可以做得更好?8.问:你是否有实习经历,在之前的实习岗位是做什么的?9.问:你在实习期间实习了多久?10.问:在企业实习(如实习神经学、大数据和网络安全等岗位)与学校跟随导师做实验室项目,两者之间有什么核心差异?答:核心差异在于研究生阶段的研究工作更多是探索性的工作,在前人基础上挖掘新的领域;而在企业实习则是针对已有的岗位和明确的工作职责,主要任务是掌握当前的工作岗位,不需要过多的探索性工作。11.问:在之前实习的过程中,遇到的最大挑战是什么?答:最大的挑战是适应体制内工作,学会半文半事,与不同人打交道,包括参加会议并做会议纪要等文书工作。12.问:在实习期间,你在做人和做事能力上有哪些具体的提升?13.问:你是否有设想过如果来到互联网公司实习后可能会遇到哪些困难,并且是否决心从事互联网行业?答:认为人生是探索,虽然了解到互联网行业的差异,但尚未深入了解,打算通过实习期间的探索,尝试进入互联网行业作为未来可能的第一份工作。14.问:如果我给你这样一个暑期实习offer,你过来之后,在上手和工作推进过程中,你觉得会遇到哪些层面的挑战或困难?答:我觉得我的岗位是测试开发,主要挑战包括编写和执行测试文档,以及进行自动化测试和基础平台的研发。这些工作都是我之前没有接触过的,需要在短期内熟悉公司的流程和技术要求,例如学习自动化测试所需的Python语言或基础平台开发能力,以及熟悉测试文档的结构、编写到执行的全流程和缺陷生命周期管理。15.问:做好这个暑期实习岗位的核心能力层面有哪些?答:核心能力层面首先是编码能力,因为进行技术平台开发时编码是必需的。其次,沟通能力也很重要,需要与产品经理、开发人员进行有效沟通。所以提升编码能力和沟通能力都是必要的。16.问:你觉得我们公司或实习岗位对你来说比较好的地方主要在哪些层面?答:我觉得主要优势在于公司的定位,作为阿里系公司,拥有足够大的平台,这对于个人能力是一种很好的背书。此外,工作地点在杭州或上海,这两个地方我都喜欢,并且对测试开发相关工作内容较为熟悉,有助于能力增长。17.问:你能否客观分析一下,觉得自己与其他申请者相比,在哪些方面具有优势和劣势?18.问:你是否可以接受上海和杭州这两个地点作为实习地点?19.问:实习时间上,你最快什么时候能开始,最晚可以实习到什么时候?反问环节1.问:公司主业是否偏向某一地?答:公司没有所谓的主业或总部概念,外卖业务上上海和杭州是双核心定位,而从阿里整体来看,杭州是总部所在地。2.问:上海这边的团队主要负责哪一块业务?答:上海团队主要负责首页APP交易到购物车、下单页的链路测试,同时负责创新型业务如拼团、秒杀、卡券类业务闭环开发,以及营销工具玩法(超级吃货卡、红包、吃货豆等)的设计与测试。3.问:是否可以了解一下工作节奏?答:实习期间,公司对实习生的工作量期望并不高,更关注实习生主动学习能力和对业务的理解深度。正常情况下,正式员工晚上一般在8点至9点半之间下班,但若项目上线节奏紧张时,可能会有所加班。
查看19道真题和解析
点赞 评论 收藏
分享
评论
8
15
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务