IcyFenix 写道
linchao198401 写道
IcyFenix 写道
mogui258 写道
最后介绍一下自己的背景,在一间不大不小的上市软件公司担任平台架构师,有3年左右的面试官经验,工作主要方向是大规模企业级应用,参与过若干个亿元级的项目的底层架构工作。
3年面试经验,多少年工作经验??
总觉得楼主面试的这道面试题很难,10%的人能回答出都觉得很高了。
如果是10%,他们都又有多少年工作经验呢!
工作3年以下的应该很少有看 《深入jvm》 这本书的吧!
3年面试经验,多少年工作经验??
工作经验不好说,06年本科毕业,09年在职硕士毕业,但是本科没有毕业就已在公司工作的正式员工。
总觉得楼主面试的这道面试题很难,10%的人能回答出都觉得很高了。
确实,回答道第三点的,10%都不到,回答道第四点的几乎没有。
如果是10%,他们都又有多少年工作经验呢!
能回答道第三点的,应届生到工作10年的人都有。
工作经验某种程度上只能代表实践程度,应届生可能确实只能从书本上看来的,而社招应聘者可能是工作中、调优中用到时去学习的。天份与实践经验我都看重。
工作3年以下的应该很少有看 《深入jvm》 这本书的吧!
感觉论坛上好多人都看过。
楼主确实能力不错,工作四年,有这样的成就,而且平时的时间还去读研究生,可见对自己的人生有很好的规划,前途很好啊。
我工作五年了,可惜还发展的不好。
我最近在看数据库的知识。
我能随便问你些问题,然后你在不查资料的情况下,随便说说嘛?
因为我用的比较多的是MySQL和Oracle。
请问你这两个数据库熟悉吗?
知道事务吗?
事务有哪些隔离性?
事务的并发是怎么实现的?一般有几种你知道的实现方式?
你知道数据库的锁吗,有哪些锁类型,对于MySQL不同的引擎有哪些不同的锁机制。例如什么引擎有什么样的锁?
Oracle有哪些类型的锁?为什么说Oracle里面没有锁升级的概念?为什么MySQL里面需要锁升级?
Oracle和MySQL都用多版本并发控制也就Multi Versioning Concurrency Control。MVCC。能知道他是怎么样的一个机制吗?有什么样的好处?
对于不同的隔离性,哪些是可以使用MVCC,哪些是不能使用?
知道Latch,也就是闩,Oracle什么时候会用到呢?
为什么说有些数据库的锁加的越多,需要升级锁,因为锁对于哪些数据库是一种宝贵的资源,而对于Oracle来说确不是这样。Oracle是怎么做到的?
跟Java里面的锁有什么相同和不同的地方?
Java的Synchronized和Compare And Set有什么不同吗?什么时候会用Compare And Set,Java JDK里面有实现吗?
对于锁资源的管理来说,锁管理是怎么样的一个实现呢。是队列吗,是Hash吗?如果让你实现你会怎么实现?
我记得Java分配对象的时候也需要有某种锁,所以对于每个线程会预先提供一些内存空间,因为是线程内的,所以就不会和多线程竞争内存空间,你觉得我说的对吗?你有了解,能更清晰的解释这个机制吗?
期待你的解答。
同时我也可以多学点锁和同步并发,以及里面的实现等问题。
为以后的面试做准备。
已看到,现在下班,回家就回答一下,不GOOGLE。
公司有数据库组,所以数据库实在说不上擅长,很多题目都被问倒了@_@
------------------------------------------
我写完了,编译一下这楼,觉得自己回答得有点失败。
因为我用的比较多的是MySQL和Oracle。
请问你这两个数据库熟悉吗?
公司用Oracle,我自己做点小东西的时候比较乐意选择SQLite,MySQL没有用过,我只回答Oracle的吧。
知道事务吗?
呃,如果只是定义为知道而不是什么擅长、精通的话……我想应该能叫知道吧
事务有哪些隔离性?
串行、可重复读、读取已提交数据、读取未提交数据
事务的并发是怎么实现的?一般有几种你知道的实现方式?
是问乐观、悲观锁定吗?
实现方式一般是两种,一种是锁,一种MVCC。乐观锁其实不是数据库的实现之一,只是UPDATE的过程中发现WHERE原来的字段的值已经不存在了,然后UPDATE的更新条目为0,你的程序或者框架如果发现是0就会报错或者抛运行时异常。
你知道数据库的锁吗,有哪些锁类型,对于MySQL不同的引擎有哪些不同的锁机制。例如什么引擎有什么样的锁?
性质上来讲,共享和排他锁,范围上来讲,数据库级(SQLite只提供这个范围的锁)、表、行,也有称表级锁为DDL锁,行级为DML锁,Oracle里面根据性质和范围,组合成……呃TM、SX之类的几种锁,具体就不记得了。这个回答我知道不太准确@_@
我也记得不是很清楚,首先Oracle里面据说没有共享锁,只要你想要SELECT东西都是能SELECT得到的。锁分成TX,事务锁,TM所以,和DDL。TX就是事务的时候加锁,加锁的位置是在行的数据头里面,例如置1,这样其他事务如果要更改这一行会发现这个已经是1了,你只能等待。TM锁是当你要修改某行的数据,你需要在表的头加个锁,这个锁不允许其他DDL语句把整个表的结构改掉,例如删除列或者添加列。DDL锁是你在删除列或者添加列等其他操作的时候加的,这个锁可以保证其他DDL的操作等待。Oracle里面还有个Latch,也就是非常轻量级的锁,这个锁在共享池中使用,共享池会放编译解析过的SQL语句或者片段,所以设计添加和查询删除的操作,而且因为是共享的,所以需要有锁,这个锁是很轻量级的,你程序员是不能控制的,如果使用不当,锁会生成很多。例如如果你使用的是JDBC里面的Statement而不是PrepareStatement,就不能重用共享池里面的SQL语句。例如SELECT * FROM user WHERE userId=i。以及SELECT * FROM user WHERE userId= :id。第一个语句每次都发送拼出来的SQL语句,Oracle每次都需要进行解析,解析是很费CPU的。如果把每次解析的SQL放入共享池,因为整个数据库要共享的,所以Latch就会很多。
Oracle有哪些类型的锁?为什么说Oracle里面没有锁升级的概念?为什么MySQL里面需要锁升级?
当锁定数据过于密集,将会将锁升级一个范围级别。譬如一张表被一个链接锁定的行太多,将可能升级为表锁,这时候大粒度的锁定反而更加有效率。Oracle为什么没有锁升级这个答不上来……
Oracle没有锁升级一说,因为Oracle的锁是放到行的数据头里面,就如Java的对象的头里面有个锁的字节,Java里面也没有锁升级吧。MySQL需要锁升级是因为使用的是锁管理器。这个管理器会处理每次的锁请求,如果请求到来之后会在锁表里面搜索这个记录行的地址,就像HashMap一样,如果找不到这一行,那么就把这一行加上,如果表示这一行已经有事务加锁了。如果找到了这一行表示其他事务正在加锁,那么就把当前的事务加入到等锁的队列Queue里面,等待锁。所以如果请求的锁很多,事务又很多,整个锁管理器会耗费很多的内存来管理行地址和事务等待队列。如果你升级锁的粒度,那么使用的锁对象和事务等待队列就会小点的。但是仍然不是很好的扩展性。
Oracle和MySQL都用多版本并发控制也就Multi Versioning Concurrency Control。MVCC。能知道他是怎么样的一个机制吗?有什么样的好处?
对于不同的隔离性,哪些是可以使用MVCC,哪些是不能使用?
回答不上来……
知道Latch,也就是闩,Oracle什么时候会用到呢?
我只知道是比锁更小的锁钉单位,具体在数据库中的使用过程真的不了解。
为什么说有些数据库的锁加的越多,需要升级锁,因为锁对于哪些数据库是一种宝贵的资源,而对于Oracle来说确不是这样。Oracle是怎么做到的?
同上面问过的……不知道
跟Java里面的锁有什么相同和不同的地方?
Java的Synchronized和Compare And Set有什么不同吗?什么时候会用Compare And Set,Java JDK里面有实现吗?
终于熬到Java了,上面数据库太打击人,我决定明天拿去数据库组给他们耍一下。
Java并发我还好曾经给在部门做过这个培训,这方面擅长一些,同步是基于临界区互斥检测的,CAS是依赖系统本身保证比较-设置这个操作的原子性。JDK5之后提供了java.util.concurrent包,里面的原子int、原子long等就是基于CAS实现。
并没有一定必须使用CAS才能完成的场景,使用CAS的最大理由是基于性能考虑,但是有很多一定需要使用Synchronized才能完成的场景,譬如最简单的你要使用object.wait/notify。
跟我理解的差不多,其实操作系统里面已经有CAS的实现,只需要一条CPU原语就可以了,CPU比较内存地址中的值是否是compare的值,如果是就把那个值复制到寄存器,然后内存中的值设置成true,如果这个时候有其他线程,那么会发现内存为true,因为是原语,所以CPU那时候肯定只有执行一个语句,也就是CAS,其他线程没有办法中断,然后切换线程。对于多核的CPU应该也是一样,没有具体的了解过。因为只是一个CPU的原语,所以肯定是比同步速度快,但是也是有缺陷的,就是只能同步的更新内存位置上的值。所以对于不管是更新int,long还是reference一样。
CAS在JDK里面的实现是AtomicInteger等等的。
对于锁资源的管理来说,锁管理是怎么样的一个实现呢。是队列吗,是Hash吗?如果让你实现你会怎么实现?
不好意思,这个问能否描述得更清楚一些,锁资源管理是指?
我记得Java分配对象的时候也需要有某种锁,所以对于每个线程会预先提供一些内存空间,因为是线程内的,所以就不会和多线程竞争内存空间,你觉得我说的对吗?你有了解,能更清晰的解释这个机制吗?
我的观点是与你有较大差别:除非强制指定了volatile,不然多线程中各个线程对变量的操作并不会直接竞争同一块内存空间,线程有自己的工作内存作为主内存中与此线程相关对象的复制品,线程中的操作都相对于工作内存而言,数据的修改只有在工作内从中修改然后同步回主内存后,才能被各个线程共享。而Java中基于性能考虑,修改与刷新回主内存并不保证严格顺序,所以才会有单例DCL失败这样的事情,关于这个在我javaeye的博客上,去年写的单例模式有过相关的叙述:)
首先,我问的这个问题是发生在分配内存,也就是NEW的时候,你说的volatile如果没有读和取的话是不会需要这个的,你说的工作栈我也知道,但是这个是执行方法的时候才有的。对于NEW这个简单的动作,首先不需要用到volatile,然后不需要用到工作栈,而且创建的对象是不会放到栈里面的,栈只能放int,long等原型类型,对于对象只能放置reference。只要是NEW就会有竞争,多个线程NEW一个内存为什么会没有竞争呢?
期待你的解答。
同时我也可以多学点锁和同步并发,以及里面的实现等问题。
为以后的面试做准备。
也谢谢你的问题,Java部分我们可以继续交流,数据库部分我真的受打击了,握手。
其实数据库的问题主要还是集中在事务和锁上面,这些对于数据库的调优,完整性都是很重要的。
分享到:
相关推荐
一个项目的亮点,往往是面试官提出深入问题的起点,也是展现求职者解决问题能力的关键。在准备面试时,开发者需要回顾每个项目的亮点,思考面试官可能问到的技术细节和业务理解,并提前准备相应的回答。例如,描述一...
应聘者需要准备一个真实的案例,说明自己曾经做过的让自己最有成就感的事情,并分析这个经历对自己的影响和成长。 3. 请用一分钟时间评价上一家公司及老板。 这类问题是面试官了解应聘者对前雇主和领导的看法和...
根据给定文件的信息,我们可以总结出面试官在IT领域经常问到的一些问题及相应的思考方式。下面将对这些常见问题进行详细的分析与解答。 ### 1. 面试官为何要提出这些问题? 面试官提出这些问题主要是为了评估应聘...
这种方法基于行为的连贯性原理,认为一个人过去的行为可以预测未来的行为。面试官应采用开放式问题,让应聘者通过具体事例来展示他们的能力和态度,而非仅听取他们的自我评价。例如,面试官可以问:“请描述一次你在...
4. **两难问题**:如对琐碎工作的看法,面试官可能是想了解你的工作态度。回答时,要表明尽管琐碎工作无处不在,但你会以积极态度对待并完成它们。 5. **克服紧张情绪**: - **陌生恐惧**:提醒自己,你与面试官都...
那么,如何才能成为一个合格的面试官呢?本文将从面试的概念、形式、内容、作用、趋势、技巧以及注意事项等多个维度为您详细阐述。 首先,了解面试的基本概念是前提。面试是一个双向的评估活动,旨在通过面对面的...
作为一名面试官,从面试官的角度谈谈大数据面试可以帮助我们更好地了解大数据面试的要点和技巧。 大数据面试的常见问题 在大数据面试中,面试官通常会问一些常见的问题,以评估候选人的技术能力和经验。这些问题...
《数据分析面试八股文合集》是一份针对数据分析求职者的宝贵资源,包含了多个文档和题库,旨在帮助求职者充分准备面试。以下是对这些文件内容的详细解析: 1. **数据分析业务面100问.docx**:这个文档可能包含了100...
**如何成为一个高效面试官** 高效面试官的工作可以分为四个阶段: 1. **准备阶段**: - 电话通知:确认候选人身份,提供面试详情。 - 场地准备:选择安静、舒适的环境。 - 工具与资料:准备简历、面试问题汇总...
将自己视为一个项目来策划和执行,自信而不紧张,展现出最佳状态。 8. **英语能力**:对外企职位来说,良好的英语沟通能力是必备的,面试前应充分准备,确保流利、准确地表达。 9. **电话面试**:电话面试虽不同于...
以下是一些可能出现在Oracle面试中的重要知识点及其详细解答,帮助你轻松应对面试官。 1. **Oracle数据库架构** - Oracle采用多层架构,包括用户接口层、SQL处理层、逻辑数据存储层和物理存储层。理解各层的功能...
以下是对几个常见面试问题的详细解答,这些解答来自于一位拥有11年大厂面试官和10年产品经理经验的专业人士。 1. **如何进行B端产品的竞品分析?** B端产品的竞品分析通常包括六个步骤: - 第一步是**确定分析...
4. 反馈与跟进:面试结束后,面试官应提供详细的面试反馈,对候选人表现的优点和改进之处进行分析。 离职率改善误区分析: 1. 薪资福利:不应只关注表面的待遇问题,而应深入了解员工的需求和期望,提供全面的福利...
面试是求职过程中至关重要的环节,面试官通过一系列问题和观察应聘者的举止来评估其是否适合岗位。以下是对面试中应注意的非语言行为和常见问题的详细解析: 1. 握手:握手是初次见面的礼仪,它传达了你的自信和...
面试官可能会询问与个人能力和职业发展相关的问题,以评估求职者的适应性和潜力。在这种情况下,我们可以从【部分内容】中提取一些与IT行业相关的知识点: 1. **时间管理** - 在IT行业中,尤其是软件开发中,时间...
在 Java 面试官面试候选人时,需要了解候选人的技术能力和思维方式。以下是面试官对候选人的评估标准和期望回答: 1. 系统空闲的时候。这种回答大约占 30%,表示候选人对 Java 的基本了解。 2. 系统自身确定,不行...
3. **问题解决能力**:面试官可能会给出一个实际或假设的场景,让候选人解释如何解决。这测试的是候选人的逻辑思维和创新能力。 4. **团队合作与沟通**:面试中也会考察候选人的团队协作能力和沟通技巧,如如何处理...
《剑指Offer——名企面试官精讲典型编程题 C++ 面试 笔试 编程》这本书是为那些准备进入IT行业的求职者,尤其是对C++编程语言有深厚兴趣的人士量身定制的。它涵盖了大量数据结构与算法的实践题目,旨在帮助读者提升...
一个专业的面试官能够准确提出问题,全面评估候选人的技能和性格。同时,一个公正的面试官能够营造一个开放的沟通环境,使候选人能够放松地展示自己的能力。 综上所述,面试官在面试程序员时,应合理地平衡德行和...
PDF格式表明这是一个具有专业结构和格式的文档,可能包括图表、案例分析或者具体的面试问题示例,以帮助读者深入理解和学习。ZIP压缩文件则意味着为了方便下载和存储,将所有内容打包在一起。 【标签】"超级面试官...