首页 文章 精选 留言 我的

精选列表

搜索[bat],共2195篇文章
优秀的个人博客,低调大师

BAT布局SDN!Barefoot获阿里巴巴和腾讯2400万美元投资

11月22日,软件定义网络(SDN)芯片公司Barefoot宣布获得2300万美元融资,由阿里巴巴和腾讯领投。本轮融资主要用于开拓市场。在今年6月,Barefoot 还获得了由高盛、谷歌领投的5700万美元融资。加上这笔资金,Barefoot C轮融资总额达到8000万美元。 网络设备可以控制和转发流量,而SDN技术可以分离二者,让SDN控制器完成流量控制,网络设备只负责流量转发。通过SDN控制器,企业可以对特定场景编程,让企业将更快更安全的线路优先部署给那些更重要的应用,在传输完成后再恢复至平时的低成本连接。而SDN控制器中最核心的部分是芯片,Barefoot便是一家提供SDN芯片的公司。 Barefoot 的主打产品是Tofino芯片,其网站称,Tofino的吞吐量能达到6.5Tb/s,是市场上运行最快的芯片。比Tofino更核心的是其可编程的PISA产品架构。SDN早期的OpenFlow协议需要网络运营商填写表格,指令交换机如何处理某些类型的流量。但PISA不会强制转换器使用现有的TCP/IP等协议,而是采用P4编程语言,让企业直接对交换机进行编程。 研究机构Nemertes的分析师John Burke表示,虽然TCP/IP等协议还没有完全被淘汰,但已经老化。随着大数据和物联网时代的来临,互联网的基础设施已经到了要进行变革的时刻,基于SDN技术的新兴IT架构,会成为一个突破口。 Barefoot 成立于2013年,3年的融资总额达到1.55亿美元,目标客户是需要处理海量数据的云计算巨头。Barefoot 的联合创始人Nick McKeown是P4编程语言的开国元勋,曾与普林斯顿大学Jennifer Rexford教授一起设计开发了P4,此后一直推进P4社区的发展。他还曾创立SDN公司Nicira Networks,该公司在2012年被VMware收购。 去年,阿里巴巴技术保障部的网络规划专家曹捷曾表示,“SDN是一系列概念的集合,是我们对网络演进方向的判断。我们认为将来的网络一定是以应用为主导的,而不是像今天这样依赖交换机厂商主导硬件和功能来引导网络的演进节奏和技术方向。”今年10月,腾讯高级网络架构师陆素建在演讲中称,腾讯从2012年开始做SDN研究,目前internet出口SDN方案已经在线网落地运营。此次投资Barefoot,也是两家巨头进行SDN布局的一大举措。 目前,国内基于SDN技术提供服务的有Pica8、云杉网络、凌锐蓝信等公司。Pica8业务发展总监杨勇涛曾表示:“SDN技术最重要的发展是,目前已经有了明确的控制器方案和支持SDN特性的芯片,也就是说底层生态链已经成熟。” 本文转自d1net(转载)

优秀的个人博客,低调大师

Java工程师修炼之路(从小白到BAT的两年学习历程)

微信公众号【黄小斜】作者是 985 硕士,蚂蚁金服 Java 工程师,终身学习践行者。(关注公众号后回复”架构师“即可领取 Java基础、进阶、项目和架构师等免费学习资料,更有数据库、分布式、微服务等热门技术学习视频,内容丰富,兼顾原理和实践,另外也将赠送作者原创的Java学习指南、Java程序员面试指南等干货资源) 前言 在下本是跨专业渣考研的985渣硕一枚,经历研究生两年的学习积累,有幸于2019秋季招聘中拿到几个公司的研发岗offer,包括百度,阿里,腾讯,今日头条,网易,华为等。 一路走来也遇到很多困难,也踩了很多坑,同时我自己也探索了很多的学习方法,总结了很多心得体会,并且,我对校园招聘也做了一些研究和相应的准备。 在今年的秋季招聘结束以后,我也决定把这些东西全部都写成文字,做成专题,以便分享给更多未来将要参加校招的同学。 更多内容后续都发布于微信公众号:程序员江湖 大学时期的迷茫与坚定 我的本科专业是电子信息工程,基本没有接触过计算机专业的课程,只学过c语言,然后在大三的时候接触过java,Android,以及前端开发。 那时候我还不知道软件开发的水有多深,抱着试一试的态度去应聘了很多公司。结果可想而知。 当年我对游戏开发很有兴趣,特别是对网易游戏情有独钟,但是当我看到网易游戏研发工程师的招聘要求时,我只能望而却步,因为它要求学历至少是985的硕士。 也因为这个契机,我在大三的暑假开始准备考研,花了一个月的时间深思熟虑之后,选择了我大华科。 毕竟是跨专业,在复习过程还是有点吃力的,但是就靠着一股毅力和执着,半年之后,顺利地考上了,成绩还意外地非常好。 研究生时期的探索和规划 对于即将读研的同学来说,一般有两件事很重要,一件事是选择导师,一件事是选择方向。 我当时本着想要找实习的想法选择了我现在的导师,事实证明我的选择还是很正确的。 而选择方向这件事,我倒是折腾了好久。研一期间我做的最多的事情就是看书了,当时自己的方向还不明确,所以找了很多书来看。当别人都在专研数据挖掘和机器学习时,我还在各种方向之间摇摆不定。 我在读研之前想做游戏开发和Android开发,但我以前也学过Java Web开发。于是我在网上了解对应方向的资讯,发现游戏研发的就业面比较窄,并且基于我之前的学习经历,java开发可能更加适合我。最终在学校的实训项目中我选择了Java Web项目,从此也真正意义上地踏上了Java的学习之路。 我的Java入门之路 之前说过,在研一期间看了很多计算机专业的书籍,比如计算机网络,操作系统,数据库等等,虽然吸收得都不太好,但也算是看过了。 于是我开始踏上学习Java的道路。最开始我找了一些Java的书单,然后买了一些比较基础的书籍,先啃为敬。那时候我看过《Java从入门到精通》这种烂大街的书,也看过《Java编程思想》这种很难懂的书。 一段时间后我感觉吸收效果不好,于是开始把目光转向视频课程了。那时候听舍友力神的建议,到极客学院上看一些视频课程,我当时就觉得这个讲的比书上要好懂一些。后来我又接触到了慕课网,中国MOOC等网站,逐渐地把相关的技术课程都看完了。 那时候正好我们的项目实训还在进行,于是我就把趁热打铁把这些东西用在了项目当中,并且第一次用博客记录下我的实践经验。 现在回头想想,此时的我也只不过是刚刚入门了Java以及web开发。然而那时候不知道天高地厚的我,就开始xjb投各大公司的Java实习岗位了。结果可想而知,那叫一个惨啊。 我的Java进阶之路 上文说到我刚刚开始投递实习岗位,是在研一的下学期。当时整天躲在实验室,一边看书一边看视频,接到面试时赶紧刷面经,忙的不亦乐乎。那段时间感觉自己的复习状态和考研差不多。 然而,由于水平确实不咋地,当时我被各大公司的面试官吊打。比如我第一家面的就是百度,三个很简单的问题一个都不会,人家面试官都不好意思打击我了。后来我又面了一些大大小小的互联网公司,虽然情况有所好转,但是总的来说,我要学习的东西还很多。 在准备面试的过程中,我看了很多面经,也看了很多技术博客,发现自己的基础很薄弱,需要系统性的学习。并且这些东西是视频和入门书籍给不了我的。于是我又踏上了找书的道路。 那时候Java书单泛滥,有的书单质量低下,买来的书看两眼就看不下去了。直到我看到了“江南白衣的后端书架”这一文章,才发现Java后端书架原来应该是这样的。于是我照葫芦画瓢把相关书籍都买了,这个阶段,也算是刚刚踏上Java进阶之路吧。 这里面不得不提几本书,对学习Java的同学非常重要,一本是《深入理解JVM虚拟机》,一本是《深入分析Java技术内幕》,以及《Java并发编程艺术》。 再后来,凭着一股不到黄河心不死的精神,终于拿到了网易游戏的实习offer。于是,第一次在大厂实习的机会终于来了,我怀着即期待又忧虑的心情来到了杭州。 我的Java实习之路 在猪场实习的时间并不长,也就持续了三个月不到,当时我们部门在做数据仓库,于是我这边主要负责Java Web应用的开发,其实也就是写一些简单的后台接口。 在熟悉了工作流程以后,我很快就适应了工作的节奏,毕竟做的东西也不难,导师也会经常指导,就这样我完成了一个又一个需求,直到后来家里有事,我才临时选择辞职回家。 由于在网易实习的时间比较短,我也留下了一些遗憾,比如对整个项目的架构不够熟悉,并且很多相关技术栈也来不及学习。后来我去熊厂实习的时候,尽量避免了这些问题。 熊厂实习的时间长达半年,部门当时做的是私有云,emmm完全是全新的技术栈啊,于是我基本上又是从零开始学习云计算,但是由于之前的操作系统和网络基础不扎实,在学习相关技术时,基本是两眼一抹黑,学啥啥不会。 这也导致我在上班期间看了很多计算机基础方面的书籍,包括《计算机网络:自顶向下》,《深入理解计算机系统》等等。当然,这也是因为我的工作内容很简单。CRUD你懂的。 于是花时间自学成为了我那时候的主旋律,看书,看内网资源,参加技术分享,倒也非常充实。当然,有空我也会看看项目代码,了解一下技术架构,以便让自己对整个项目有一个更好的理解。 再后来,2018年来了。 抉择时刻:实习转正还是秋招 我是2018年1月份离开北京的。当时面临几个问题,是否续租房子,是否继续实习。还有一个小插曲就是当时养的一只猫也得带回去。再三思考后我决定回学校准备秋招。 过年后我就回到学校了,当时我本不打算参加春招,想要潜心修炼准备秋招,但是架不住春招宣传力度大,并且几个大厂都标榜着“转正容易,hc多多”等口号。于是我没忍住,上牛客投了几次简历,打算面几家大厂,心想万一过了就去吧。 简历都投出去了,那也只好复习了啊,当时我们宿舍跟打了鸡血一样,一整天都在刷题,从早到晚泡着刷LeetCode,一个月后终于刷到100多题,也算是能应付一下笔试了吧。 春招我投的公司不多,也就at,网易游戏和京东。最后阿里和京东都给了offer。但是当时阿里的流程走得特别慢,直到内推截止前一天才给我发offer,并且自己也感觉之前面试表现一般,心想我要是去了也是B+,很有可能成为拥抱变化的牺牲品,于是我咬咬牙放弃了,大不了秋招再来。 塞翁失马,焉知非福,春招的颗粒无收反而让我可以安心准备秋招,于是我有大把的时间做我想做的事,制定自己的学习计划,安排自己的生活,不需要去考虑转正这种麻烦事了。 至此,四月终了,春招告一段落。 Java修仙之路 平时经常逛牛客,我也经常发些面经啥的,于是很多牛油喜欢调侃说“看神仙”。这时候我只能尴尬又不失礼貌的微笑了0。0 在下不才,成不了神仙,最多就是打游戏的时候能修修仙罢了。 不过你还真别说,网上还真有“Java成神之路”这样的文章,真的打扰了哈哈。 科普一下修仙梗: 修仙梗的意思是喜欢熬夜的人不睡觉不猝死反而要修仙,然后就被广大的网友们互相调侃玩坏了,现在熬夜都不叫熬夜了,新潮的说法就是修仙,熬夜不会猝死啊,会增强法力。 不逗你们了,咱们还是进入正题吧。我在五月份的时候做了一个计划,打算在七月底之前完成复习工作,原因是七月底有阿里的提前批招聘,是我最最重视的一个招聘。这个计划简称三个月计划,我主要做了三个方面的学习规划。 一:首先,便是对Java后端技术栈的复习,这也是最重要的一部分,因为面试永远都是考基础考得最多。 这部分内容又可以细分为多个方面: 1 Java知识体系:包括了Java基础,集合类,设计模式,Java并发技术,Java网络编程,JVM,JavaWeb,Spring框架等等。 2 计算机基础:包括了操作系统,计算机网络,数据结构,数据库,缓存等内容。 3 后端进阶:包括了分布式理论,以及常见分布式技术比如负载均衡,zookeeper,消息队列,分布式缓存等等。当然,这里面也包括系统架构方面的知识,以及RPC,微服务等内容。 4 额外内容:这部分内容因人而异,我主要是因为实习的时候项目涉及了hadoop以及私有云技术栈,所以自己看了很多这方面的东西,譬如Hadoop生态,OpenStack生态,以及docker生态。 我在复习这部分内容的时候,一般先看优质博客,然后自己整理总结对应写一些博客,最后把能够实现的东西实现一下,这样一来一个知识点就搞定了。剩下的事情就是重复这个步骤。 下面放上我的博客:https://blog.csdn.net/a724888 二:其次,便是对算法的学习了。我也把算法的学习分为了几个部分。 1 基础数据结构与算法:主要是复习之前学过的数据结构和算法,额外再看一些算法书籍,譬如《图解算法》,以了解常见算法。 2 剑指offer:剑指offer基本上是面试必考的,所以把它刷个两三遍是很有必要的。 3 LeetCode:搞定前面两项之后,刷LeetCode也会有些底气了,我当时就刷了150题左右,主要也是刷经典的题目。 4 笔试真题:这个就不用多说了,真题是一定要刷的。毕竟各个公司出题的路子都花里胡哨。 刷题多了,就会遇到很多原题和类似题目,所以,尽早开刷,做好准备吧。 三、最后一部分,则是做项目。大概说下我做项目的几个要点吧 1 为什么这时候我还要做项目呢:一来是我觉得实习过程自己接触的东西太细碎,没有对全局做把控,二来是因为想给GitHub加点东西,顺便学点新的技术。于是我选择了当时牛客网上的两个项目来自己做做看。 2 关于项目选择:叶神这两个项目还是讲的非常棒棒的,用的东西也很新,代码也有提供,避免了自己要写前端的尴尬,另外,这两个项目模仿了知乎和头条,更加接地气。 3 把项目做到GitHub上:之前对git也比较熟了,所以想把这个项目按照正常开发的流程走一遍,于是我每天都会做一个模块,然后发布几个版本,记录一下版本更新的细节,写这些东西的时候,自己其实就已经做了思考和总结,感觉还是不错的。 下面放上我的GitHub:https://github.com/h2pl 就这么过了三个月,提前批拉开序幕。 秋招回忆录 从七月初第一次投递简历,到九月初,整整两个月的时间,大大小小投了几十家公司,其中很多都是提前批,内推,也经历了许多的笔试,面试。 期间也拿了几个offer,包括百度,腾讯,蚂蚁金服,头条,华为,网易(网易云音乐没给offer,调到了其他部门)。有几家直接收到拒信的,包括拼多多,深信服。还有几家在等待结果。包括快手,斗鱼等。 当然也有一些还没面试完的公司以及待安排面试的公司,这里就不展开说了。 八月底基本上提前批就已经结束了,所以一般这段时间正式校招也开始了,各种大规模的笔试也很多,所以大家即使没有拿到offer也不要灰心,毕竟校招是一场持久战,基本上要到九月十月才能下结论。我之前分享了很多公司的面经,其实大部分都是提前批的,很多都是直接免笔试的,因为我对算法并不是很在行,所以感觉还是比较幸运的。 从七月底第一次面试到9月基本佛系,中间经历了大大小小的面试,这里只进行简单的记录哈,要看面经的话请到我的公众号:程序员江湖。 具体的面经都比较长,这里大概介绍一下面试的情况,然后我会放上面经的链接供大家查阅。 1 阿里面经 阿里中间件研发面经 蚂蚁金服研发面经 岗位是研发工程师,直接找蚂蚁金服的大佬进行内推。 我参与了阿里巴巴中间件部门的提前批面试,一共经历了四次面试,拿到了口头offer。 然后我也参加了蚂蚁金服中间件部门的面试,经历了三次面试,但是没有走流程,所以面试中止了。 最后我走的是蚂蚁金服财富事业群的流程,经历了四次面试,包括一次交叉面,最终拿到了蚂蚁金服的意向书,评级为A。 阿里的面试体验还是比较好的,至少不要求手写算法,但是非常注重Java基础,中间件部门还会特别安排Java基础笔试。 2 腾讯面经 腾讯研发面经 岗位是后台开发工程师,我没有选择意向事业群。 SNG的部门捞了我的简历,开始了面试,他们的技术栈主要是Java,所以比较有的聊。 一共经历了四次技术面试和一次HR面试,目前正在等待结果。 腾讯的面试一如既往地注重考查网络和操作系统,并且喜欢问Linux底层的一些知识,在这方面我还是有很多不足的。 3 百度面经 百度研发面经 百度研发面经整合版 岗位是研发工程师岗位,部门包括百度智能云的三个分部门以及大搜索部门。 百度的提前批面试不走流程,所以可以同时面试好多个部门,所以我参加百度面试的次数大概有12次左右,最终应该是拿了两个部门的offer。 百度的面试风格非常统一,每次面试基本都要到电脑上写算法,所以那段时间写算法写的头皮发麻。 4 网易面经 网易研发面经 面试部门是网易云音乐,岗位是Java开发工程师。 网易是唯一一家我去外地面试的公司,也是我最早去实习的老东家。 一共三轮面试,耗时一个下午。 网易的面试比我想象中的要难,面试官会问的问题都比较深,并且会让你写一些结合实践的代码。 5 头条面经 今日头条研发面经 岗位是后台研发工程师,地点选择了上海。 我参加的是字节跳动的内推面试,当时找了一个牛友要到了白金码,再次感谢这位头条大佬。 然后就开始了一下午的视频面试,一共三轮技术面试,每一轮都要写代码,问问题的风格有点像腾讯,也喜欢问一些底层知识,让我有点懵逼。 如果想看更多公司的面经,也请移步微信公众号:程序员江湖。 另外,我上周还面试了一次亚马逊,因为很多知名外企到十月才开始招人,所以闲了很久之后我又重操旧业了,可能在面完大摩和微软之后,秋招才能正式结束吧 结束也是开始 中秋节刚过,国庆节又要到来了。正如每一年的秋招一样,年复一年,在时间面前我们也是渺小的尘埃。 秋招结束不代表着结局,而是新的旅程开始,马上,毕业论文,offer选择,入职准备,毕业旅行等事项也要提上日程了。 不知道明年我们看待学弟学妹的秋招时,会是怎样的一种心境呢。 ▼更多精彩内容 笔试经验小分享 有关秋招面试的一些小技巧 我的秋招经验分享(内附校招交流群) 微信公众号【程序员江湖】 一个专注于程序员修炼和成长的平台,这里有技术指南、求职攻略,也有职场经验、生活感悟,更有自我提升的方法、对成长的思考等内容。作者是一枚阿里程序员,每天和你一起聊聊,程序员练级之路上的那些事。

优秀的个人博客,低调大师

金九银十总结面试套路为你收割BAT大厂offer(文末送书)

让你做自我介绍(准备好) 看看你简历,说你对这个比较熟?balabla...你问的简单就熟,问的难不好意思不太了解 看看你实习经历,让你介绍实习干啥了,有没有什么大项目能拿得出手,干聊10-20分钟的 问问职业规划。这里表现出你态度的虔诚,不会乱跳槽,踏踏实实的干,让他感受到你想进这家公司,两眼能放光就更好了... 大佬们可以海吹一波 你有啥子问题。我一般预备两个问题,您这部门具体做什么能介绍一下?我什么时候能知道自己是过了还是没过呢?尽量不要不问,各路大佬在贴中都说过了 一定要把主动权掌握在自己手中,面试官会问很多你平时不了解或压根不知道的问题,这时你可以说平时我用不到这些(可以理解啊,应届生上哪懂这么多邪门歪道啊,大佬请无视我),然后说自己对xxx领域有点研究,引导他来问你 对面提问你时,其实很考验你答辩技巧的,当你熟悉的东西时,那很OK,balabala即可,问你不熟悉的(你只知道点皮毛,但也在简历上写了),你可以说“我做项目时碰到过一点,大体查了下,有点印象,您可以试着问一下”,这样会让面试官把期望放低,问题难度也会降低,答出来加分,答不出来也无所谓HR面 自我介绍(准备版非技术的! 从本科到大学,研究方向,选择这家公司理由,实习经历拉一拉,时间一般能凑够了,让对方感觉你是个健谈的人) 聊聊兴趣爱好(准备些健康的爱好,游戏公司可以考虑非健康的...) 聊聊实习经历,和上下级处的如何,有压力怎么办 你有啥问题(千万不要说没有,要表现出自己对这个工作的热情)。我对这部门还有些不了解,您能在系统介绍下吗?入职培训介绍一下? 懂套路肯定是不够的,还要有真材实料才行。 下面是我在各个大厂面试之后总结出来的知识点体系图,为你收割offer添砖加瓦。 一:源码方面是肯定要了解的 学习Java技术体系,设计模式,流行的框架与组件源码理解是必不可少的: 常见的设计模式,编码必备 Spring5,做应用必不可少的最新框架 MyBatis,玩数据库必不可少的组件 二:工程化与工具 工欲善其事必先利其器,不管是小白,还是资深开发,玩Java技术体系,选择好的工具,提升开发效率和团队协作效率,是必不可少的: Maven,项目管理 Jenkins,持续集成 Sonar,代码质量管理 Git,版本管理 三:分布式架构 高并发,高可用,海量数据,没有分布式的架构知识肯定是玩不转的: 分布式架构原理 分布式架构策略 分布式中间件 分布式架构实战 四:微服务架构 业务越来越复杂,服务分层,微服务架构是架构升级的必由之路,Java技术体系,和微服务相关的技术有哪些呢? 微服务框架 Spring Cloud Docker与虚拟化 微服务架构 五:性能优化 任何脱离细节的ppt架构师都是耍流氓,向上能运筹帷幄,向下能解决一线性能问题,Java技术体系,需要了解: 性能指标体系 JVM调优 Web调优 DB调优 六:底层知识 从架构设计,到应用层调优,再深入了解底层原理,扎实的Java基本功才能让自己变为扫地神僧: 内存模型 并发模式 线程模型 锁细节 原文发布时间为:2018-09-17 本文作者: Java技术驿站 本文来自云栖社区合作伙伴“ 大数据文摘”,了解相关信息可以关注“ 大数据文摘”。

优秀的个人博客,低调大师

【巨头升级寡头】AI产业数据称王,GAN和迁移学习能否突围BAT垄断?

AI时代,数据为王让巨头越来越难以被打败 上周,谷歌和 CMU 的一项合作研究,为拥有大数据优势的技术巨头们带来了喜讯:在不调整现有算法、只是给模型多得多的数据的情况下,图像识别结果取得了较大提升。 这一波人工智能的兴起主要有三大因素推动——计算力、数据和算法。而谷歌和 CMU 的这项合作研究可能会将“数据”这一项进一步高亮显示。 据 Wired 报道,研究结果一方面印证了通过给模型喂食多得多的数据,同样的算法也能显著提升性能,另一方面,这也是对拥有海量数据的技术巨头的喜讯。无论是谷歌、Facebook 还是微软,都会更加坚信自己手中的数据是决胜的王牌。虽然从1百万扩充到3百万数据集,对象检测的结果只提高了3个百分点,但研究者表示,他们相信如果对软件进行调整,使其更适应于超大数据集,那么优势还将扩大。退一万步说,即使没有扩大

优秀的个人博客,低调大师

进入BAT等主流互联网公司做Java开发需要达到什么技术水平?

最近面试了阿里、京东、美团、滴滴等大型互联网公司,最终收到了美团offer,这次面试过后,我把面试过的公司的面试题做了一个整理。这篇文章是我凭回忆记录的,面试题没有顺序,不分先后,接下来公布我去阿里、京东、美团等一线互联网公司的面试题: 一、阿里巴巴面试 1、开发中Java用得比较多的数据结构有哪些? 2、谈谈你对HashMap的理解,底层原理的基本实现,HashMap怎么解决碰撞问题的? 这些数据结构中是线程安全的吗?假如你回答HashMap是线程安全的,接着问有没有线程安全的map,接下来问conurren包。 3、对JVM熟不熟悉?简单说说类加载过程,里面执行的哪些操作?问了GC和内存管理,平时在tomect里面有没有进行过相关的配置。 4、说一下http协议、get和post的基本区别,接着问tcp/ip协议,三次握手,窗口滑动机制。 5、开发中用了哪些数据库?回答mysql;储存引擎有哪些?然后问了我悲观锁和乐观锁问题使用场景、分布式集群实现的原理。 6、springmvc和mybatis的工作原理,有没有看过底层源码? 二、京东金融面试 1、Dubbo超时重试;Dubbo超时时间设置 2、如何保障请求执行顺序 3、分布式事物与分布式锁(扣款不要出现负数) 4、分布式session设置 5、执行某操作,前50次成功,第51次失败a全部回滚b前50次提交第51次抛异常,ab场景分别如何设置Spring(传播性) 6、Zookeeper有哪些用 7、JVM内存模型 8、数据库垂直和水平拆分 9、MyBatis如何分页;如何设置缓存;MySQL分页。 10、熟悉IO么?与NIO的区别,阻塞与非阻塞的区别。 11、分布式session一致性 12、分布式接口的幂等性设计「不能重复扣款」 三、美团面试 1、最近做的比较熟悉的项目是哪个?画一下项目技术架构图。 2、JVM老年代和新生代的比例? 3、YGC和FGC发生的具体场景 4、jstack,jmap,jutil分别的意义?如何线上排查JVM的相关问题? 5、线程池的构造类的方法的5个参数的具体意义? 6、单机上一个线程池正在处理服务如果忽然断电该怎么办?(正在处理和阻塞队列里的请求怎么处理?) 7、使用无界阻塞队列会出现什么问题? 8、接口如何处理重复请求? 9、具体处理方案是什么? 10、如何保证共享变量修改时的原子性? 11、设计一个对外服务的接口实现类,在1,2,3这三个主机(对应不同IP)上实现负载均衡和顺序轮询机制(考虑并发) 四、滴滴面试 1、自我介绍;技术特点 2、兴趣是什么;优势是什么 3、jvm、jre以及jdk三者之间的关系? 4、Dubbo的底层原理,Zookeeper是什么 5、cincurrentMap的机制;TreeMap;Volatil关键字 6、快速排序;广度优先搜索(队列实现) 7、缓存的雪崩以及穿透的理解? 8、HashMap的key可以重复吗? 9、synchronized和lock的区别? 10.开发一个大型网站你会考虑哪些问题? 以上就是全部的面试题目,针对以上知识点,结合当前互联网公司的技术需求及主流技术,我整理了一套系统的架构技术体系。不少公司很重视高并发高可用的技术,特别是一线互联网公司,分布式、JVM、spring源码分析、微服务等知识点已经是面试的必考题。这些东西可能你们平时在工作中接触过,但是缺少全面系统的学习,希望对正在面试的朋友或是遭遇技术瓶颈的程序员们提供一点思路。 架构筑基篇 性能优化如何理解 常用工具调优 linux基础与进阶 开源框架篇 Sprng5框架 AOP源码解析 Mybatis IOC源码解析 Spring MVC 高性能架构篇 分布式架构思维 分布式协调和分流 高可靠数据储存 缓存和NoSQL 异步与消息中间件 分布式解决方案实战 微服务架构篇 SpringBoot SpringCloud Docker虚拟技术 Dubbo应用及源码解读 团队协作开发篇 Git Maven Sonar Jenkins B2C商城项目实战篇 系统设计 用户管理子系统 搜索子系统 订单子系统 商品管理子系统 支付系统 后台系统 分布式调度系统 欢迎工作一到五年的Java工程师朋友们加入Java填坑之路:860113481 群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

优秀的个人博客,低调大师

2019秋招|已拿BAT等7家offer大佬的秋招总结&建议

秋招在今天就算结束了,近几个月在牛客上学习,现在也算是回馈一下牛友们。 秋招运气比较好,拿到百度、阿里、腾讯、华为、360、美团、小米的(准)offer,不过都是意向书。。。。非正式。攒波人品,等国庆后的结果吧。 本人本科211,硕士末流985。实力很渣,实验室项目也不行。全靠研二的时候,研三的师兄带路(他们工作确实找的好),他们分享他们的招聘经验、学习资料和方法等,还有就是研二的同实验室的同学的帮助也至关重要,所以研二这一年时间还算没有浪费,基本都花在学习、项目。算是给我们一个很大的指导作用,在这里真的很感谢他们。 我个人的简历、笔试、面试情况:(时间顺序 7-9月,我全是提前批,除了腾讯、美团) 1、多益网络(一面) offer (确实出乎意料,有点略水,就一面。。。) 2、oppo(一面、二面) hr面挂(估计跟着前面的人吼价格 吼高了, 跪了。。所以谈薪还是要慎重) 3、阿里巴巴(钉钉团队) (终面、附加编程面、交叉面、hr面) offer (之前拿到实习offer,人太怂没去。这里给后面投阿里的同学一个建议,一定要投实习,因为阿里秋招很喜欢从实习批的人录取,走绿色通道) 4、百度(企业云团队) (一面、二面、三面、性格测试、hr面) offer (这个挺看运气,面试官人不错) 5、网易(云音乐) 笔试挂 (投网易的云音乐要慎重,头的人太多,不够出彩就别去尝试,浪费机会,个人看法) 6、网易互娱笔试挂 (虽然三道全部AC了,但是估计全AC的也比较多,双非等限制,后面就没有面试的邀请了。。) 7、奇虎360(安全卫士后台团队) (一面、二面、hr面) (面试官人挺好的,我觉得我挺多的都不会,但是还让我过了。。。可能c++那一块答得不错,这个确实看运气) 8、华为(cloudbu团队,优招批)(业务面、技术加面、总裁面)(华为玄学面试,全看运气) 9、拼多多(基础平台,提前批挂) 校招批笔试通过,至今没面试,算挂了吧 10、小米(java的一个电商后台,做订单系统的) (一面、二面)(笔试没做,还是发意向了。。小米和头条差不多,强调手撕代码,我撕了4道,有道算法不会做的,面试官把算法和数据结构都给我说了,,,还好我写出来了。。这个面试官真的不错,我就喜欢这样的) 11、头条(笔试4.3AC) 一面挂 (一轮游,还是太菜,手撕了一个比较一般的题,写了25分钟,虽然跑过了所有测试用例,面试官还是把我挂了。。其他基础都没问题,所以。头条还是重code。如果想进头条,刷leetcode、剑指offer吧,这个是面试官给我的唯一的建议) 12、美团(餐饮链 java团队 一面、二面、三面、hr面,这个是校招批) 口头offer (一面code差点没写出来,估计没写出来就凉了。。。运气。美团主要是看个人思维、技术等,不限语言,所以是c++的伙伴也可以考虑美团) 13、腾讯(sng数据中心团队 一面、二面、hr面今天走完了 这是校招批) 等结果(hr给我说 每轮评价都很好,应该没问题) (之前腾讯提前批挂了,算上实习面试,我腾讯的面试记录都有4、5个了,大部分差评价,所以根据我的情况,有的小伙伴不用担心面试评价的问题,还是要简历要做好) 后面就没有面其他公司了。希望我今天的分享能给腾讯攒波人品,我最想进的就是tencent。。。。腾讯情结 -.- 下面是我个人的一些建议和面经吧,分为几个板块:(可能也不适用于一些人,当看着玩吧) 1、书籍推荐 2、学习氛围 3、简历修改 4、面试技巧 5、面经分享 --------------------------------------------------------------------------------------------------------------------------------------------------------------- 书籍推荐 c++ : 《effictive C++》、《SGI STL源码解析》(侯捷)、《effictive STL》、《深入探索C++对象模型》、《c++ primer》等 网络:《计算机网络》、《图解tcp/ip》 、《tcp/ip详解》、《UNIX 网络编程》(想进腾讯的小伙伴最好看看这个) ***作系统:《深入理解计算机系统》、《***作系统-精髓与设计原理》、《UNIX 高级环境编程》 数据库:《高性能MySQL》、《Redis实战》(我没读)、《数据库原理及设计》 数据结构和算法:《剑指offer》、《数据结构及算法实现》(名字我可能记不太清)、leetcode(我就只刷了100道,算是我们实验室刷的最少的了) 实战:《Linux多线程服务器编程-使用muduo C++网络库》(陈硕) (这本书强烈推荐,从实战的角度分析处理问题,我们实验室都看了这本书的) 其他。。。。 学习氛围 主要说说我的情况吧,导师这边要做项目,我的项目比较少,所以有更多时间看书;其他同学有项目,但是他们也抽空闲时间看书。基本晚上9点半才从实验室回寝室吧。这里还是强调不要单兵作战,我们这届实验室的同学跟上届师兄一样,抱的比较紧,有什么问题可以互相问,解决的过程中就可以相互提高了,每本书的学习,每个人的理解程度都不一样,理解的角度也不一样,我们一般都会进行交流,使得学到的知识更加全面吧,学习效率也比较高。在招聘这一块,我们一般有什么招聘信息出来了都相互传播一哈,大家能够第一时间了解到招聘信息,笔试面试都有同学一起去,没那么孤单。 简历修改 我个人的观点吧,看看就行。我觉得简历主要还是一页就好,简单明了,最好是第一时间就能让面试官知道你会什么。整个页面干净、有条理就行,不用彩色的条纹那些(尽量别在外观上浪费太多时间)。除了一般要写的个人基本信息、荣誉、学历、项目以外,做技术的同学,建议就是再弄一个 技术栈的模块出来,比如c++会哪些、网络会哪些、数据库会哪些。这样简单明了,我腾讯和美团现场面的,我看到的就是面试官其实就是一条一条的对着我的技术栈一个一个问的。此外在字眼的使用上,好好注意把握 “了解”、“熟悉”、“精通”,一般建议写“熟悉”,不太稳的写“了解”,高手都不建议写精通,一旦有一个不会,面试官的印象大打折扣,觉得不够谦虚。照片的话可贴可不贴。我就没贴,主要人太丑。。。很尴尬。 面试技巧 说实话,我个人的技术实力真的很一般,在实验室我都算排在后面的,实验室大佬太多,在技术上我就跟着学,偷学一波技能。我觉得我的优势在于面试技巧上,在面试的时候,我觉得要善于引导面试官,俗称“带节奏”,其实就是与人相处交流的一些方式方法了。 首先是自我介绍,我觉得自我介绍个人信息不用太详细,就说个名字 学校 专业 即可。其他信息面试官也看的到,没必要说。如果是计算机专业的 好学校的 建议说出来,突出一下,给面试官一个好印象。 然后下面应该直接简单明了的告诉面试官 个人的技术栈,给面试指方向。不然面试官真的有可能瞎问,问到会的还好,不会的就容易凉凉。在下面可以说你的项目,大概提一下即可。 技术栈介绍:首先主动引导面试官问那方面的问题,在回答问题的时候,故意带一点其他的你会的知识点,可能有的面试官就会心血来潮问你那个引子。比如我给面试官介绍我的项目框架的时候,提到了epoll,他就问我epoll 和select区别、lt et区别,这些都是准备好的,自然你也就会答得出来。这算是套路面试官吧。如果遇到面试官问道的问题不会答,也不要慌,可以用这样的语句:“不好意思,这个我没太了解,不过我知道与这个相近的xxx,你看我给你分享这个xxx的个人体会可以吗”,有的面试官就会同意的,这样不容易题目被带偏。 还有就是如果就是真的不知道的,就直接说不知道,这个没什么的。比如 面试官问我 你数据库怎么样? 我一般都说,不太会。 一般面试官就不会问了。如果你掌握的不好,你说还可以,那他问你结果都不会,就是一直吃 暴击伤害。。。面试官印象很差,还不如直接说不会。 项目:主要要分析清楚,条理清晰,面试官并不关心你的项目如何如何渣 如何如何叼,在于的是你对项目的思考和理解吧。 面经分享(内容不全,后面也没时间写面经了。格式不太好弄,笔记上copy过来的,将就看吧-。-) 可能也有些有错的地方,欢迎牛友指正。 多益网络 1、项目部分(似乎对muduo更感兴趣) 介绍了项目功能、架构 muduo有哪些精彩的地方,说一下。 吹了一下异步日志的双buf的实现、buf本身的readv 的性能 2、基础知识 1、linux IO模型(5种) 记不太清,说了几种,应该没说完。(应该是:同步阻塞、同步非阻塞、多路复用、信号驱动、异步IO)应该还要说细节 2、静态链接库和动态链接库的区别 3、什么是线程不安全 4、c++ 继承和组合 ,为何优先使用组合(这个我不知道理由)ps:应该是组合能实现和继承一样的功能,但是对于父类对象,在组合中是不会暴露细节的,相当于是黑盒,而继承是“白盒”。 5、什么时候使用链表或者队列?(增加、删除频率较高的场景) 6、c++ const的作用? (变量和函数两方面 mutable) 7、百度地图如何实现实时路况 8、快排算法 稳定性 9、函数指针的使用场景、好处。使用于回调函数 虚表指针就是例子 10、你会用什么结构来查询?(hash表、map、 set这些) 11、tcp udp的区别 使用场景 12、什么是缓冲区溢出 3、编程 数组循环右移 将一个长度为n的数组A的元素循环右移k位 比如 数组 1, 2, 3, 4, 5 循环右移3位之后变成 3, 4, 5, 1, 2 4、其他 1、如何看待加班? 2、你的爱好是什么?玩什么游戏? 3、你最近在看什么书? 4、你还有什么要问我的吗? 腾讯OMG团队(实习) 1、画出tcp头部的协议格式。 扩展: udp头部、ip头部、http头部 2、Http的报文头部 3、数组和指针的区别 (1)数组本身体现出来的就是一个 指针常量的 “特性”,即不能对数组的首地址进行修改,内存上的地址就已经是确定了的。而指针本身是一个变量,他指向了一个地址,这个是可以变化的,也就说他可以重新赋值指向新的地址; (2)当调用sizeof函数时,对于数组,得到的是数组元素个数*数据类型的大小,而对于指针,得到的是指针类型的大小,这个取决于机器的位数,比如32位机,对应的指针就是4字节的大小; (3)指针相比数组更加灵活。 相同之处:比如当作为形参的时候,定义成 指针还是数组都是一样的,因为这个时候传入的都是数组的首地址,也就是这个数组名,反映出来的就等于是一个指针。 4、参数传递的方式 值传递、引用传递、指针传 5、c++种struct和class的区别 (1)如果不申明访问权限,class的默认权限是private,而struct是public (2)对于继承,如果也没有明确是public继承还是private继承或者是protected继承,class 默认是private的继承,而struct是public继承。 (3)从抽象上来说,class更像是对象的实现体,而struct更像是数据结构的实现体。 6、构造函数能不能是虚函数? 不能,因为类对象中占前4个字节的虚表指针 需要在构造函数完成之后才会生成,通过 虚表指针才能找到虚函数表,访问调用对应的虚函数。如果构造函数是虚函数,那么就只能通过虚表指针才能访问到,关键是此时就需要让构造函数产生出虚表指针。陷入了先有蛋还是现有鸡的问题 7、析构函数可不可以是虚函数? 可以,而且如果说这个类不是final的,也就是说他是某一个类的父类,那么该类的析构函数必须是虚函数,因为如果不是虚函数,那么其子类对象的父类组成部分将无法得到释放,造成资源泄露。 8、析构函数可不可以是纯虚函数? 我觉得不建议是,因为我们知道纯虚函数是没有实现体的,那么子类对象在析构的时候,父类组成部分就没办法释放,显然不行。但是对于大部分编译器来说,可以将析构函数申明为纯虚函数,然后在类外写纯虚函数的实现体,从语法上不会报错。 9、举例一种STL中的容器 答:比如vector(当时答得是这个),vector的的实现其实就是封装了一个动态数组,里面有3个内部迭代器,分别是start、finnish、end_of_storage。如果通过push_back或者insert插入元素造成超过容量,此时容量会扩展至2倍,这个过程分为:重新配置、移动拷贝元素、释放原空间,这3个大部,支持随机访问等 10、举例STL的一种算法 答:比如find、accumulate、next_permutation、unique、position等等 11、如何防止c++头文件被重复引用 答:可以使用ifndef或者program once,都可以。但是两者有一些区别。从兼容性上说,ifndfe更好,有些老的编译器可能不支持program once;此外,对于2个名字不同的头文件,但内容相同,ifndef还是可以鉴别出来,防止重复,program once 不行。 12、内联函数和宏的区别 答:内联函数的展开发生在编译期,而宏是在预处理阶段;内联函数本身是函数,而宏不是;最重要的一点:内联函数会对参数进行类型检查,而宏只是简单的替换,所以内联函数更加安全,所以往往宏需要对参数加括号,但是也不一定安全, 内联函数有自己明确的作用域或者访问权限,比如放在类里面的private,而宏是没有的。 13、linux下常用命令 答:(1)ls -al 显示当前目录下的所有文件目录信息,包括隐藏的 (2)mkdir 创建文件夹 (3)cat 查看文件内容 (4)cp 拷贝 (5)rm -rf 删除文件(夹)下所有文件 (6)find 查找文件 (7)grep 正则匹配 (8)pwd 显示当前文件路径 (9)ln 创建文件连接 -s 软连接 (10)chmod 修改文件权限 (11)netstat -a |grep 查看网络状态 (12)top 14、linux下进程管理的相关命令 (1)ps -e 查看所有的进程信息 (2)kill -9 pid 强行杀死进程 (3)top -p pid 查看进程信息 15、linux下如何查看内存、磁盘情况 (1)top (2)df (3)free 16、什么叫软连接和硬链接,他们的区别是什么 硬链接是以文件副本引用的形式存在的,他跟源文件拥有同一个inode节点;软连接是以路径的形式存在的,他的inode节点所对应的数据块存储的是源文件的路径。他们的区别的是:软连接可以跨文件系统创建,而且可以对目录进行创建,硬链接都不行,所以,相对来说,软连接更加灵活,删除软连接不会产生任何影响,但是如果源文件被删除了,那么所有的软连接就失效了,所以很像windows下的快捷方式。 17、什么叫相对路径什么叫绝对路径? 答:以/开头的就是绝对路径,因为他代表了从根目录出发的路径,反之就是相对路径 18、进程间通信的方式? 答:无名管道、有名管道FIFO,消息队列、共享内存、信号量、socket等,(应该进行简略阐述 19、c++下如何调用C的包? 答:extern “C”,通知编译器其所包含的代码用c的方式进行编译,这样连接的时候不会报错,否则会找不到函数符号。 20、找出去重后的数字的命令 $ sort test.txt | uniq 21、socket编程tcp客户端连接过程 建立套接字对象,connect、read/wirte 22\socket编程tcp服务器端连接过程 建立套接字对象、bind、listen、 accept、read/wirte 23、epoll和select的区别? 答:select能支持的文件描述符数是有限的,最大1024个,并且每次调用前都需要将其监听的读集、写集、错误集从用户态向内核态拷贝,返回后又拷贝回去,而且,select返回的时候是将所有的文件描述符返回,也就意味着一旦有个事件触发,只能通过遍历的方式才能找到具体是哪一个事件,效率比较低、开销也比较大,但是也有好处,就是他的超时的单位是微秒级别; epoll能支持的文件描述符数很大,可以上万,他的高效由3个部分组成:红黑树、双向链表、回调函数,每次将监听事件拷贝到内核后就存放在红黑树种,以EventPoll的结构体存在,如果有相应的事件发生,对应的回调函数就会触发,进而就会将该事件拷贝至双向链表中返回,而且,epoll每次返回的都是有事件发生的事件,不是所有时间,所以比较高效,总的来说epoll适用于连接数较多,活跃数较少的场景、而select适用于连接数不多,但大多都活跃的场景。 24、同一个IP同一个端口可以同时建立tcp和udp的连接吗 答可以,同一个端口虽然udp和tcp的端口数字是一样的,但实质他们是不同的端口,所以是没有影响的,从底层实质分析,对于每一个连接内核维护了一个五元组,包含了源ip,目的ip、源端口目的端口、以及传输协议,在这里尽管前4项都一样,但是传输协议是不一样的,所以内核会认为是2个不同的连接,在ip层就会进行开始分流,tcp的走tcp,udp走udp。 25、mysql的建表、删除表、更新表、查询表用什么命令 答:Create|Drop|Update|Select TABLE [表名] 26、mysql的索引有哪几种? 答:(1)普通索引 CREAT INDEX [index_name] ON table(column(length)) (2)唯一索引 (3)全文索引 (4)单列、多列索引 (5)组合索引 27、索引的优缺点,索引是不是越多越好? 答:主要就是可以有效的缩短数据的检索时间,建立索引的列可以保证行的唯一性,可以加快表与表的连接;但是创建索引、维护索引需要时间和空间成本,每条索引都要占据数据库的存储空间,此外,每次的增删改都需要对索引进行动态的维护,也会导致时间变长。 28、索引的适用场景 答:(1)数据量大的并且查询频率高的应当使用索引 (2)表与表连接时的联合查询,约束条件的字段应该建立索引 (3)用于排序的字段可以使用索引 。。。。。 29、索引的原理 答:以空间换时间,建立索引之后,会将索引的KEY值放在一个BTree上,这个方式是一种n分法,btree适合在磁盘上动态查找表,每次以索引进行查找的时候,会根据key值进行搜索,logn级别的。 腾讯天美工作室(实习) 1、hash表使用开链,里面的链表过长说明了什么? 答:hash函数设计的不好,导致冲突严重,进而导致同一个“桶”内的链表数目增多。 2、c++不能被继承的类 答:(1)、可以将构造函数放入到private里面,这样是无法构造出子类对象的,同时增加一个static的 get instance的函数,来调用构造函数。(但是这样得不到一个栈上的对象) (2)、让该类去虚继承一个模板类,传人的模板类型就是该类,使得该类成为模板类的友元,这样子类在构造时,他直接先构造祖先类的成分,显然他不是友元,所以失败。 (3)、使用c++11新增的final关键字,使得申明的类是一个最终类,无法被继承。 3、什么叫字长? 答:计算机在同一个时间能处理的一组二进制数称为计算机的一个字,这组二进制数的位数就是字长,所以现在计算机有16位、32位、64位等。 4、计算机的存储系统? 答:分为内存和外存,其中内存有主存、cache、寄存器等,外存分为磁盘、光盘等 5、static关键字的作用,存放位置 答:static关键字有隔离隐藏作用,比如多个cpp文件,如果将全局变量声明为static,那么该变量只对该文件可见;变量声明为static,可以使得这个值的生命期是整个程序结束;此外,c++类中的staitic 申明的变量和函数表示都是属于类的属性,而不是对象的成员。未初始化的放在bss段,初始化的放在data段中。 6、堆和栈的区别 答: 从管理方式上, 栈是由编译器自动管理,无需我们手动控制; 对于堆,开辟和释放工作由程序员控制,所以有内存泄漏等情况的发生。 从申请大小上, 栈是有高地址向低地址扩展的,是一块连续的内存区域,所以栈的栈顶地址或者大小 是一开始就分配好的。在使用过程中,比如递归调用层数过多,那么就有可能造成栈溢出,所以栈能获得的空间比较少; 堆是向高地址扩展的,是链表组织的方式,所以有可能是不连续的,他的大小只受限于有效的虚拟内存大小,所以堆能开辟的空间较大。 从碎片问题上, 栈是没有碎片的情况,因为他有严格的出栈入栈,不会存在一个内存块从栈的中间位置弹出; 堆有碎片的情况,频繁的调用new/delete分配释放内存,必然会造成内存碎片。 从分配方式上, 堆都是动态分配的 栈大多是静态分配的,也可以动态分配,可以由alloc函数分配。 从分配效率上, 计算机会在底层对栈提供支持,比如有专门的寄存器分配,用来存放栈的地址,压栈出栈的指令等; 堆是由c/c++函数库提供的,机制比较复杂(未了解) 7、struct和class的区别 答:这个在OMG面试中也出现过。 8、malloc和new的区别 答:最大的区别在于malloc只是简单的分配了内存空间,而new在分配了内存空间之后调用了对象的构造函数。详细的见:new和malloc的区别,或者delete和free.note 9、引用和指针的区别 答:引用是一个已有对象的别称,指针是一个地址,从非空性上说,引用不能为空,指针本身是个值,可以为空;在编码的时候,对引用我们不需要判断,但是对于指针,我们必须对其非空性进行判断;当指向的对象可能在发生变化的时候,往往使用指针,而引用一定固定的。 10、map的底层实现 答底层是红黑树实现的,它是一个比较平衡的搜索二叉树,内部有序,所以在查找和删除的时候比较高效,时间复杂度是logn 11、tcp的三次握手过程和四次挥手过程 答:这个建议将函数调用的情况添加进去说明。详细:TCP建立连接三次握手和释放连接四次握手.note 12、c++多态的实现原理 答:c++多态主要是通过虚函数表实现的,c++多态的体现,主要是通过父类指针指向一个子类对象,此时调用的函数就是子类的函数,体现了多态性,因为在调用过程中,通过钱4个字节的虚表指针找到了虚函数表,此时由于实际对象是子类对象,那么其虚函数表是子类的虚函数表,对于同一个虚函数,子类的虚函数将会覆盖掉父类的虚函数,构建出自己的虚函数表,所以此时通过虚表指针访问放的虚函数就是子类的虚函数,这就是c++的多态的体现。 13、c++对象的内存模型 答:在内存中,前4个字节代表了其虚表指针,指向的是子类的虚函数表,接下来存放的是父类的对象的成员,再是子类成员部分。 14c++的内存模型 答:内存分为5个段,从低地址往高地址,一次是代码段、数据段、bss段、堆、栈。然后balabala。。。。 15、滑动窗口的作用 答:主要就是为了实现流量控制,控制了发送包的速率,每次发送方只能发送滑动窗口内部的数据包,才能保证接收方不会因为发送过快造成流量淹没,数据包的丢失。他的大小是 拥塞窗口和通告窗口 两者的最小值。 项目 1、如何实现断点续传,如何提高上传速 算法 1、计算表达式 (改成后缀表达式进行处理) 2、朋友圈问题,求总共有多少个朋友圈 (使用并查集) 3、链表逆序 (剑指offer上有,但是如果不改变内存结构,那就只能改变值,使用栈进行存储) 4、一个数组找中位数(通过快排思想,常数级的若干次求position,直到恰好是中心,时间复杂度是O(n),如果是海量数据呢2g数据,500内存如何处理?->hash之后分成小文件,再外部排序,使用归并,可以使用最大堆,直到数据过半) 腾讯SNG(实习一面) 只持续了20分钟,似乎面试官很忙。 1、系统调用和库函数有什么区别和联系 2、epoll和select的区别 3、epoll的高效,有几种工作模式( LT、ET) 4、TCP 和 UDP的区别 5、TIMEWAIT是什么,为什么要设置TIMEWAIT状态 6、TCP的可靠性是如何实现的?(流量控制、拥塞控制、确认序号、校验???) 暂时记不起来了。 oppo(一面) 首先介绍项目,我给他介绍了一下这个项目的架构,功能。 问题1:你觉得这个项目的难点在于哪里?(懵逼了) 答:难点到不太多,可以说一下学到了什么,优化了什么,比如数据传输协议用到了protobuf,更快,更安全、数据量更小。 问题2:io复用和异步io有什么区别? 答:IO复用其实一种同步IO,他只是将事件通知统一交给了select或者epoll,所以,对于IO复用,其实Select或者epoll在检测可用时是阻塞的,里面的读写一般也是阻塞的,而异步IO是不会阻塞的,数据从内核态拷贝到用户态缓冲区完成后,***作系统会发送信号,通知进程处理,这个过程进程是可以继续执行的,这个就是异步io。 问题3:多进程和多线程有什么区别?如果给你一个业务场景,你是如何选择多进程还是多线程? 答:多线程共享同一个地址空间,带来的好处就是他们进行通信比较方便,可以通过全局变量等,但是也有隐患,需要处理好竞争问题,而且一旦一个线程崩掉了,整个进程就死了,影响其他进程。多进程相反。。此外,线程的创建开销更小。多进程的场景举例:比如你要进行主机迁移,多进程的话,你可以将某个进程迁移到另外的主机,不受影响,但是多线程没法迁移。 问题4:讲一讲c++的虚函数表呢? 答:c++的多态就是通过虚函数表来实现的,该表是在编译期生成,存放在rodata段,我们知道一个类的对象的内存结构是前4个字节是其虚表指针,即vptr,指向了其虚表,虚表中装的就是该类的虚函数。c++多态的体现,往往是通过父类指针,指向子类对象,我们发现调用的虚函数是子类的虚函数,而不是父类的就是因为此时的对象是子类对象,其虚表是子类的虚表,其中的同名虚函数早在编译期就已经被覆盖成子类的虚函数了,所以此时调用的是子类的虚函数,多态就是这么体现的。 问题5:构造函数、析构函数的顺序,为什么析构函数是反向的? 答:构造:先父类再子类; 析构:先子类再父类。 这是c++的规则。 中间 做了一套笔试题,各种各样的都有。 编程/算法 1、一个文件无序存放了1w个数字,每行1个。数字范围1-1w,现在随机删除2个数字。请把他们2个找出来。 答:使用hash数组,遍历文件,每遍历到一个数字,就以该数字为下标的数组元素置1,不用加1,因为数字不重复的。最后再遍历一遍数组,值为0的元素的下标就是所求数字。 2、如何对你申请的内存进行优化? 答:可以使用bitmap,每一bit可以代表一个数字,这样可以压缩内存。 3、压缩率是多少? 答:每个bit一个数字,而之前数组一个元素是int类型的,占32位,所以压缩率是32倍。 4、什么场景用bitmap? 答:我说数据较为密集,而且你这里数据是连续不重复,就符合,而且你的数据是有范围的。 5、如果数据有重复呢? 答:可以使用2-bitmap,00代表不出现,01代表出现1次,10代表出现2次,11表示无定义,这样遍历一遍就可以找到是哪几个数字 他回答:不是,比如数字3,具体有多少出现,这个这需要知道的。 我说:10bit可以表示的数是1024,而你每个数字不可能超过1w次。所以要记录次数的话,就还是用bitmap但是不是1位,大概1个数用14bit吧,但相比32位一个数要好些。 oppo二面 2、介绍usb的项目、功能、架构 3、这个io复用模型跟普通多线程、多进程的区别 答: io复用,多个链接复用一个线程,而普通多线程是一个链接一个线程,所以必然创建线程的数目就多,现成的创建是有开销的,所以io复用这种开销小。 4、网络传输的数据协议 主要有3个段,前8bit是数据type,中间是length,最后是具体的data。 5、如果协议是这样。如果两个数据包连在一起,怎么分开? 答:在首部再加几个bit,作为隔离位。 6、如何实现你的fd是负载均衡的 答:分类处理 7、多个用户访问同一个资源,如何加锁 答:不太明白他的意思,epoll内部处理事件是同步依次执行的,而且这里的锁是线程资源 8、tcp是如何处理粘包? 9、tcp是如何关闭的?就是说4次挥手过程 10、如果tcp关闭的第四个分节没有被收到,那么怎么办? 11、tcp的拥塞控制过程 12、delete和free的区别 13、STL的出现是为了什么 14、STL的迭代器的类型有哪几种? 15、STL hashmap的实现? 16、线程间同步的手段 17、进程间通信的方式 18、如何使用信号量制作出一个互斥锁 19、系统调用的返回有什么变化? 20、描述一下系统中断的过程 21、c++多态是如何实现的? 22、c++多继承是如何实现?如何处理同名变量 23、怎么实现无锁***作 24、你评价一下你自己。 25、你觉得你同学朋友如何评价你? 26、你对哪些技术感兴趣? 27、参加过哪些社团 28、你怎么协调与他人的关系的? 29、你有什么要问我的吗? 百度云一面 1、C++多态的实现 2、多重继承下,多个父类含有同一同名函数,子类对象调用会有问题吗? 答:首先 AB2个父类中的函数假设就是普通成员函数f(),那么子类C没有自己的f函数,其对象c.f()的时候就会报错,编译报错,存在二义性。如果C有自己的f函数,此时不会报错,调用的是自己c类的f()函数,也就是说此时父类的函数就被隐藏了。如果AB中的f()是虚函数,那么也不受影响,还是调c的。如果2个f的参数类型也不一样,也会报二义性错误。(为什么呢?) 3、static变量 4、tcp三次握手 、2次、4次? 5、tcp可靠性的实现原因 6、滑动窗口的作用 7、原子***作如何实现(锁、cas***作) 8、如何实现一个互斥锁,互斥锁的实现原理 想不起来了 笔试: 特殊链表(每个节点带一个随机指针),对该链表进行复制,输出复制后的新链表。(剑指offer原题) 百度云二面 1、socket和epoll的关系区别?(不太懂他意思,反正对epoll的底层进行了阐述) 2、红黑树是线程安全的吗 3、有哪些同步手段 4、用过哪种锁(mutex) 5、读写锁了解过吗,自己实现一下,提出思路即可(对读***作进行计数) 6、计数如何保证线程安全?(cas***作、***作系统底层指令支持) 7、vector的插入pushback的时间复杂度是多少(O(n)) 8、如果vectorpushback的时候扩容了,比如pushback n个数,时间复杂度是多少?(我给他阐述了内存拷贝的过程,但是不知道怎么求,他回答说:其实是一个等差数列,最后求得还是O(n)) 9、vector底层是几个指针实现的(3个 start、finish、end_of_storage) 10、vector扩容几倍 (SGI STL的vector是2倍) 11、c++多态的实现(run time的多态:指针或者引用 结合 虚函数表实现) 12、c++11 move语意解释一下 13、 move除了用于指针,还可以用于哪些?比如哪些数据结构 (vector) 14、拿过哪些offer 想不起来了。。。 360二面 1、使用stl如何保证线程安全(除了锁以外) 2、交给sub 线程的文件描述符如何回收的? 3、tcp粘包 4、linux下查看网络连接 5、linux下查看内存cpu (top) 6、linux下查看内核版本 uname-a 7、linux下查看发行版本 cat /etc/issue 8、IO和reactor模式 (吹的select和epoll) 9、linux下 进程cpu占用是怎么计算的(大致是:通过/proc/stat 读取CPU总的时间,再通过/proc/pid/stat下读取进程的占用时间,做除法。(比较粗略的阐述)) 10、linux下 tmp目录里面的内容会被清除吗(会,系统会执行tmpwatch脚本,一般传入参数是时间,比如 tmpwatch 10 /tmp/ 表示的就是会删除10天内没有修改、访问的文件。) 11、怎么查动态依赖的库有哪些?(readelf -a [程序名] |grep library) 腾讯IEG魔方工作室(简历面) tcp udp 游戏 容器线程安全 hashmap实现 新链接 何时注册写事件 主线程如何将fd交给sub线程? 为什么这个回调函数在本函数执行,是线程安全的? rehash 多线程,多进程区别 切换的性能损耗 strncpy 。。。 总算写完了。。给腾讯攒人品!求不搞事啊。(-。-)

优秀的个人博客,低调大师

BAT等大厂总结的前200页Java面试题都在这里了

内容较多,请大家耐心阅读 基本概念 操作系统中 heap 和 stack 的区别 什么是基于注解的切面实现 什么是 对象/关系 映射集成模块 什么是 Java 的反射机制 什么是 ACID BS与CS的联系与区别 Cookie 和 Session的区别 fail-fast 与 fail-safe 机制有什么区别 get 和 post请求的区别 Interface 与 abstract 类的区别 IOC的优点是什么 IO 和 NIO的区别,NIO优点 Java 8 / Java 7 为我们提供了什么新功能 什么是竞态条件? 举个例子说明。 JRE、JDK、JVM 及 JIT 之间有什么不同 MVC的各个部分都有那些技术来实现?如何实现? RPC 通信和 RMI 区别 什么是 Web Service(Web服务) JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI,WSDL解释。 WEB容器主要有哪些功能? 并请列出一些常见的WEB容器名字。 一个”.java”源文件中是否可以包含多个类(不是内部类)?有什么限制 简单说说你了解的类加载器。是否实现过类加载器 解释一下什么叫AOP(面向切面编程) 请简述 Servlet 的生命周期及其相关的方法 请简述一下 Ajax 的原理及实现步骤 简单描述Struts的主要功能 什么是 N 层架构 什么是CORBA?用途是什么 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言” 什么是正则表达式?用途是什么?哪个包使用正则表达式来实现模式匹配 什么是懒加载(Lazy Loading) 什么是尾递归,为什么需要尾递归 什么是控制反转(Inversion of Control)与依赖注入(Dependency Injection) 关键字 finalize 什么是finalize()方法 finalize()方法什么时候被调用 析构函数(finalization)的目的是什么 final 和 finalize 的区别 final final关键字有哪些用法 final 与 static 关键字可以用于哪里?它们的作用是什么 final, finally, finalize的区别 final、finalize 和 finally 的不同之处? 能否在运行时向 static final 类型的赋值 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变 一个类被声明为final类型,表示了什么意思 throws, throw, try, catch, finally分别代表什么意义 Java 有几种修饰符?分别用来修饰什么 volatile volatile 修饰符的有过什么实践 volatile 变量是什么?volatile 变量和 atomic 变量有什么不同 volatile 类型变量提供什么保证?能使得一个非原子操作变成原子操作吗 能创建 volatile 数组吗? transient变量有什么特点 super什么时候使用 public static void 写成 static public void会怎样 说明一下public static void main(String args[])这段声明里每个关键字的作用 请说出作用域public, private, protected, 以及不写时的区别 sizeof 是Java 的关键字吗 欢迎工作一到五年的Java工程师朋友们加入Java填坑之路:860113481 群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代! static static class 与 non static class的区别 static 关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法 静态类型有什么特点 main() 方法为什么必须是静态的?能不能声明 main() 方法为非静态 是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用 静态变量在什么时候加载?编译期还是运行期?静态代码块加载的时机呢 成员方法是否可以访问静态变量?为什么静态方法不能访问成员变量 switch switch 语句中的表达式可以是什么类型数据 switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上 while 循环和 do 循环有什么不同 操作符 &操作符和&&操作符有什么区别? a = a + b 与 a += b 的区别? 逻辑操作符 (&,|,^)与条件操作符(&&,||)的区别 3*0.1 == 0.3 将会返回什么?true 还是 false? float f=3.4; 是否正确? short s1 = 1; s1 = s1 + 1;有什么错? 数据结构 基础类型(Primitives) 基础类型(Primitives)与封装类型(Wrappers)的区别在哪里 简述九种基本数据类型的大小,以及他们的封装类 int 和 Integer 哪个会占用更多的内存? int 和 Integer 有什么区别?parseInt()函数在什么时候使用到 float和double的默认值是多少 如何去小数四舍五入保留小数点后两位 char 型变量中能不能存贮一个中文汉字,为什么 类型转换 怎样将 bytes 转换为 long 类型 怎么将 byte 转换为 String 如何将数值型字符转换为数字 我们能将 int 强制转换为 byte 类型的变量吗?如果该值大于 byte 类型的范围,将会出现什么现象 能在不进行强制转换的情况下将一个 double 值赋值给 long 类型的变量吗 类型向下转换是什么 数组 如何权衡是使用无序的数组还是有序的数组 怎么判断数组是 null 还是为空 怎么打印数组? 怎样打印数组中的重复元素 Array 和 ArrayList有什么区别?什么时候应该使用Array而不是ArrayList 数组和链表数据结构描述,各自的时间复杂度 数组有没有length()这个方法? String有没有length()这个方法 队列 队列和栈是什么,列出它们的区别 BlockingQueue是什么 简述 ConcurrentLinkedQueue LinkedBlockingQueue 的用处和不同之处。 ArrayList、Vector、LinkedList的存储性能和特性 String StringBuffer ByteBuffer 与 StringBuffer有什么区别 HashMap HashMap的工作原理是什么 内部的数据结构是什么 HashMap 的 table的容量如何确定?loadFactor 是什么? 该容量如何变化?这种变化会带来什么问题? HashMap 实现的数据结构是什么?如何实现 HashMap 和 HashTable、ConcurrentHashMap 的区别 HashMap的遍历方式及效率 HashMap、LinkedMap、TreeMap的区别 如何决定选用HashMap还是TreeMap 如果HashMap的大小超过了负载因子(load factor)定义的容量,怎么办 HashMap 是线程安全的吗?并发下使用的 Map 是什么,它们内部原理分别是什么,比如存储方式、 hashcode、扩容、 默认容量等 HashSet HashSet和TreeSet有什么区别 HashSet 内部是如何工作的 WeakHashMap 是怎么工作的? Set Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用 == 还是 equals()? 它们有何区别? TreeMap:TreeMap 是采用什么树实现的?TreeMap、HashMap、LindedHashMap的区别。TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素? TreeSet:一个已经构建好的 TreeSet,怎么完成倒排序。 EnumSet 是什么 Hash算法 Hashcode 的作用 简述一致性 Hash 算法 有没有可能 两个不相等的对象有相同的 hashcode?当两个对象 hashcode 相同怎么办?如何获取值对象 为什么在重写 equals 方法的时候需要重写 hashCode 方法?equals与 hashCode 的异同点在哪里 a.hashCode() 有什么用?与 a.equals(b) 有什么关系 hashCode() 和 equals() 方法的重要性体现在什么地方 Object:Object有哪些公用方法?Object类hashcode,equals 设计原则? sun为什么这么设计?Object类的概述 如何在父类中为子类自动完成所有的 hashcode 和 equals 实现?这么做有何优劣。 可以在 hashcode() 中使用随机数字吗? LinkedHashMap LinkedHashMap 和 PriorityQueue 的区别是什么 List List, Set, Map三个接口,存取元素时各有什么特点 List, Set, Map 是否继承自 Collection 接口 遍历一个 List 有哪些不同的方式 LinkedList LinkedList 是单向链表还是双向链表 LinkedList 与 ArrayList 有什么区别 描述下 Java 中集合(Collections),接口(Interfaces),实现(Implementations)的概念。LinkedList 与 ArrayList 的区别是什么? 插入数据时,ArrayList, LinkedList, Vector谁速度较快? ArrayList ArrayList 和 HashMap 的默认大小是多数 ArrayList 和 LinkedList 的区别,什么时候用 ArrayList? ArrayList 和 Set 的区别? ArrayList, LinkedList, Vector的区别 ArrayList是如何实现的,ArrayList 和 LinkedList 的区别 ArrayList如何实现扩容 Array 和 ArrayList 有何区别?什么时候更适合用Array 说出ArraList,Vector, LinkedList的存储性能和特性 Map Map, Set, List, Queue, Stack Map 接口提供了哪些不同的集合视图 为什么 Map 接口不继承 Collection 接口 Collections 介绍Java中的Collection FrameWork。集合类框架的基本接口有哪些 Collections类是什么?Collection 和 Collections的区别?Collection、Map的实现 集合类框架的最佳实践有哪些 为什么 Collection 不从 Cloneable 和 Serializable 接口继承 说出几点 Java 中使用 Collections 的最佳实践? Collections 中 遗留类 (HashTable、Vector) 和 现有类的区别 什么是 B+树,B-树,列出实际的使用场景。 接口 Comparator 与 Comparable 接口是干什么的?列出它们的区别 对象 拷贝(clone) 如何实现对象克隆 深拷贝和浅拷贝区别 深拷贝和浅拷贝如何实现激活机制 写clone()方法时,通常都有一行代码,是什么 比较 在比较对象时,”==” 运算符和 equals 运算有何区别 如果要重写一个对象的equals方法,还要考虑什么 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对 构造器 构造器链是什么 创建对象时构造器的调用顺序 不可变对象 什么是不可变象(immutable object) 为什么 Java 中的 String 是不可变的(Immutable) 如何构建不可变的类结构?关键点在哪里 能创建一个包含可变对象的不可变对象吗 如何对一组对象进行排序 方法 构造器(constructor)是否可被重写(override) 方法可以同时即是 static 又是 synchronized 的吗 abstract 的 method是否可同时是 static,是否可同时是 native,是否可同时是synchronized Java支持哪种参数传递类型 一个对象被当作参数传递到一个方法,是值传递还是引用传递 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递 我们能否重载main()方法 如果main方法被声明为private会怎样 GC 概念 GC是什么?为什么要有GC 什么时候会导致垃圾回收 GC是怎么样运行的 新老以及永久区是什么 GC 有几种方式?怎么配置 什么时候一个对象会被GC? 如何判断一个对象是否存活 System.gc() Runtime.gc()会做什么事情? 能保证 GC 执行吗 垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? Minor GC 、Major GC、Young GC 与 Full GC分别在什么时候发生 垃圾回收算法的实现原理 如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存? 垃圾回收的最佳做法是什么 GC收集器有哪些 垃圾回收器的基本原理是什么? 串行(serial)收集器和吞吐量(throughput)收集器的区别是什么 Serial 与 Parallel GC之间的不同之处 CMS 收集器 与 G1 收集器的特点与区别 CMS垃圾回收器的工作过程 JVM 中一次完整的 GC 流程是怎样的? 对象如何晋升到老年代 吞吐量优先和响应优先的垃圾收集器选择 GC策略 举个实际的场景,选择一个GC策略 JVM的永久代中会发生垃圾回收吗 收集方法 标记清除、标记整理、复制算法的原理与特点?分别用在什么地方 如果让你优化收集方法,有什么思路 JVM 参数 说说你知道的几种主要的jvm 参数 -XX:+UseCompressedOops 有什么作用 类加载器(ClassLoader) Java 类加载器都有哪些 JVM如何加载字节码文件 内存管理 JVM内存分哪几个区,每个区的作用是什么 一个对象从创建到销毁都是怎么在这些部分里存活和转移的 解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法 JVM中哪个参数是用来控制线程的栈堆栈小 简述内存分配与回收策略 简述重排序,内存屏障,happen-before,主内存,工作内存 Java中存在内存泄漏问题吗?请举例说明 简述 Java 中软引用(SoftReferenc)、弱引用(WeakReference)和虚引用 内存映射缓存区是什么 jstack,jstat,jmap,jconsole怎么用 32 位 JVM 和 64 位 JVM 的最大堆内存分别是多数?32 位和 64 位的 JVM,int 类型变量的长度是多数? 怎样通过 Java 程序来判断 JVM 是 32 位 还是 64 位 JVM自身会维护缓存吗?是不是在堆中进行对象分配,操作系统的堆还是JVM自己管理堆 什么情况下会发生栈内存溢出 双亲委派模型是什么 多线程 基本概念 什么是线程 多线程的优点 多线程的几种实现方式 用 Runnable 还是 Thread 什么是线程安全 Vector, SimpleDateFormat 是线程安全类吗 什么 Java 原型不是线程安全的 哪些集合类是线程安全的 多线程中的忙循环是什么 如何创建一个线程 编写多线程程序有几种实现方式 什么是线程局部变量 线程和进程有什么区别?进程间如何通讯,线程间如何通讯 什么是多线程环境下的伪共享(false sharing) 同步和异步有何异同,在什么情况下分别使用他们?举例说明 Current ConcurrentHashMap 和 Hashtable的区别 ArrayBlockingQueue, CountDownLatch的用法 ConcurrentHashMap的并发度是什么 CyclicBarrier 和 CountDownLatch有什么不同?各自的内部原理和用法是什么 Semaphore的用法 Thread 启动一个线程是调用 run() 还是 start() 方法?start() 和 run() 方法有什么区别 调用start()方法时会执行run()方法,为什么不能直接调用run()方法 sleep() 方法和对象的 wait() 方法都可以让线程暂停执行,它们有什么区别 yield方法有什么作用?sleep() 方法和 yield() 方法有什么区别 Java 中如何停止一个线程 stop() 和 suspend() 方法为何不推荐使用 如何在两个线程间共享数据 如何强制启动一个线程 如何让正在运行的线程暂停一段时间 什么是线程组,为什么在Java中不推荐使用 你是如何调用 wait(方法的)?使用 if 块还是循环?为什么 生命周期 有哪些不同的线程生命周期 线程状态,BLOCKED 和 WAITING 有什么区别 画一个线程的生命周期状态图 ThreadLocal 用途是什么,原理是什么,用的时候要注意什么 ThreadPool 线程池是什么?为什么要使用它 如何创建一个Java线程池 ThreadPool用法与优势 提交任务时,线程池队列已满时会发会生什么 newCache 和 newFixed 有什么区别?简述原理。构造函数的各个参数的含义是什么,比如 coreSize, maxsize 等 线程池的实现策略 线程池的关闭方式有几种,各自的区别是什么 线程池中submit() 和 execute()方法有什么区别? 线程调度 Java中用到的线程调度算法是什么 什么是多线程中的上下文切换 你对线程优先级的理解是什么 什么是线程调度器 (Thread Scheduler) 和时间分片 (Time Slicing) 线程同步 请说出你所知的线程同步的方法 synchronized 的原理是什么 synchronized 和 ReentrantLock 有什么不同 什么场景下可以使用 volatile 替换 synchronized 有T1,T2,T3三个线程,怎么确保它们按顺序执行?怎样保证T2在T1执行完后执行,T3在T2执行完后执行 同步块内的线程抛出异常会发生什么 当一个线程进入一个对象的 synchronized 方法A 之后,其它线程是否可进入此对象的 synchronized 方法B 使用 synchronized 修饰静态方法和非静态方法有什么区别 如何从给定集合那里创建一个 synchronized 的集合 锁 Java Concurrency API 中 的 Lock 接口是什么?对比同步它有什么优势 Lock 与 Synchronized 的区别?Lock 接口比 synchronized 块的优势是什么 ReadWriteLock是什么? 锁机制有什么用 什么是乐观锁(Optimistic Locking)?如何实现乐观锁?如何避免ABA问题 解释以下名词:重排序,自旋锁,偏向锁,轻量级锁,可重入锁,公平锁,非公平锁,乐观锁,悲观锁 什么时候应该使用可重入锁 简述锁的等级方法锁、对象锁、类锁 Java中活锁和死锁有什么区别? 什么是死锁(Deadlock)?导致线程死锁的原因?如何确保 N 个线程可以访问 N 个资源同时又不导致死锁 死锁与活锁的区别,死锁与饥饿的区别 怎么检测一个线程是否拥有锁 如何实现分布式锁 有哪些无锁数据结构,他们实现的原理是什么 读写锁可以用于什么应用场景 Executors类是什么? Executor和Executors的区别 什么是Java线程转储(Thread Dump),如何得到它 如何在Java中获取线程堆栈 说出 3 条在 Java 中使用线程的最佳实践 在线程中你怎么处理不可捕捉异常 实际项目中使用多线程举例。你在多线程环境中遇到的常见的问题是什么?你是怎么解决它的 请说出与线程同步以及线程调度相关的方法 程序中有3个 socket,需要多少个线程来处理 假如有一个第三方接口,有很多个线程去调用获取数据,现在规定每秒钟最多有 10 个线程同时调用它,如何做到 如何在 Windows 和 Linux 上查找哪个线程使用的 CPU 时间最长 如何确保 main() 方法所在的线程是 Java 程序最后结束的线程 非常多个线程(可能是不同机器),相互之间需要等待协调才能完成某种工作,问怎么设计这种协调方案 你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它 异常 基本概念 Error 和 Exception有什么区别 UnsupportedOperationException是什么 NullPointerException 和 ArrayIndexOutOfBoundException 之间有什么相同之处 什么是受检查的异常,什么是运行时异常 运行时异常与一般异常有何异同 简述一个你最常见到的runtime exception(运行时异常) finally finally关键词在异常处理中如何使用 如果执行finally代码块之前方法返回了结果,或者JVM退出了,finally块中的代码还会执行吗 try里有return,finally还执行么?那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后 在什么情况下,finally语句不会执行 throw 和 throws 有什么区别? OOM你遇到过哪些情况?你是怎么搞定的? SOF你遇到过哪些情况? 既然我们可以用RuntimeException来处理错误,那么你认为为什么Java中还存在检查型异常 当自己创建异常类的时候应该注意什么 导致空指针异常的原因 异常处理 handle or declare 原则应该如何理解 怎么利用 JUnit 来测试一个方法的异常 catch块里别不写代码有什么问题 你曾经自定义实现过异常吗?怎么写的 什么是 异常链 在try块中可以抛出异常吗 JDBC 通过 JDBC 连接数据库有哪几种方式 阐述 JDBC 操作数据库的基本步骤 JDBC 中如何进行事务处理 什么是 JdbcTemplate 什么是 DAO 模块 使用 JDBC 操作数据库时,如何提升读取数据的性能?如何提升更新数据的性能 列出 5 个应该遵循的 JDBC 最佳实践 IO File File类型中定义了什么方法来创建一级目录 File类型中定义了什么方法来判断一个文件是否存在 流 为了提高读写性能,可以采用什么流 Java中有几种类型的流 JDK 为每种类型的流提供了一些抽象类以供继承,分别是哪些类 对文本文件操作用什么I/O流 对各种基本数据类型和String类型的读写,采用什么流 能指定字符编码的 I/O 流类型是什么 序列化 什么是序列化?如何实现 Java 序列化及注意事项 Serializable 与 Externalizable 的区别 Socket socket 选项 TCP NO DELAY 是指什么 Socket 工作在 TCP/IP 协议栈是哪一层 TCP、UDP 区别及 Java 实现方式 说几点 IO 的最佳实践 直接缓冲区与非直接缓冲器有什么区别? 怎么读写 ByteBuffer?ByteBuffer 中的字节序是什么 当用System.in.read(buffer)从键盘输入一行n个字符后,存储在缓冲区buffer中的字节数是多少 如何使用扫描器类(Scanner Class)令牌化 面向对象编程(OOP) 解释下多态性(polymorphism),封装性(encapsulation),内聚(cohesion)以及耦合(coupling) 多态的实现原理 封装、继承和多态是什么 对象封装的原则是什么? 类 获得一个类的类对象有哪些方式 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分? 说出几条 Java 中方法重载的最佳实践 抽象类 抽象类和接口的区别 抽象类中是否可以有静态的main方法 抽象类是否可实现(implements)接口 抽象类是否可继承具体类(concrete class) 匿名类(Anonymous Inner Class) 匿名内部类是否可以继承其它类?是否可以实现接口 内部类 内部类分为几种 内部类可以引用它的包含类(外部类)的成员吗 请说一下 Java 中为什么要引入内部类?还有匿名内部类 继承 继承(Inheritance)与聚合(Aggregation)的区别在哪里 继承和组合之间有什么不同 为什么类只能单继承,接口可以多继承 存在两个类,B 继承 A,C 继承 B,能将 B 转换为 C 么?如 C = (C) B 如果类 a 继承类 b,实现接口c,而类 b 和接口 c 中定义了同名变量,请问会出现什么问题 接口 接口是什么 接口是否可继承接口 为什么要使用接口而不是直接使用具体类?接口有什么优点 泛型 泛型的存在是用来解决什么问题 泛型的常用特点 List能否转为List 工具类 日历 Calendar Class的用途 如何在Java中获取日历类的实例 解释一些日历类中的重要方法 GregorianCalendar 类是什么 SimpleTimeZone 类是什么 Locale类是什么 如何格式化日期对象 如何添加小时(hour)到一个日期对象(Date Objects) 如何将字符串 YYYYMMDD 转换为日期 Math Math.round()什么作用?Math.round(11.5) 等于多少?Math.round(-11.5)等于多少? XML XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?DOM 和 SAX 解析器有什么不同? Java解析XML的方式 用 jdom 解析 xml 文件时如何解决中文问题?如何解析 你在项目中用到了 XML 技术的哪些方面?如何实现 动态代理 描述动态代理的几种实现方式,分别说出相应的优缺点 设计模式 什么是设计模式(Design Patterns)?你用过哪种设计模式?用在什么场合 你知道哪些商业级设计模式? 哪些设计模式可以增加系统的可扩展性 单例模式 除了单例模式,你在生产环境中还用过什么设计模式? 写 Singleton 单例模式 单例模式的双检锁是什么 如何创建线程安全的 Singleton 什么是类的单例模式 写出三种单例模式实现 适配器模式 适配器模式是什么?什么时候使用 适配器模式和代理模式之前有什么不同 适配器模式和装饰器模式有什么区别 什么时候使用享元模式 什么时候使用组合模式 什么时候使用访问者模式 什么是模板方法模式 请给出1个符合开闭原则的设计模式的例子 开放问题 用一句话概括 Web 编程的特点 Google是如何在一秒内把搜索结果返回给用户 哪种依赖注入方式你建议使用,构造器注入,还是 Setter方法注入 树(二叉或其他)形成许多普通数据结构的基础。请描述一些这样的数据结构以及何时可以使用它们 某一项功能如何设计 线上系统突然变得异常缓慢,你如何查找问题 什么样的项目不适合用框架 新浪微博是如何实现把微博推给订阅者 简要介绍下从浏览器输入 URL 开始到获取到请求界面之后 Java Web 应用中发生了什么 请你谈谈SSH整合 高并发下,如何做到安全的修改同一行数据 12306网站的订票系统如何实现,如何保证不会票不被超卖 网站性能优化如何优化的 聊了下曾经参与设计的服务器架构 请思考一个方案,实现分布式环境下的 countDownLatch 请思考一个方案,设计一个可以控制缓存总体大小的自动适应的本地缓存 在你的职业生涯中,算得上最困难的技术挑战是什么 如何写一篇设计文档,目录是什么 大写的O是什么?举几个例子 编程中自己都怎么考虑一些设计原则的,比如开闭原则,以及在工作中的应用 解释一下网络应用的模式及其特点 设计一个在线文档系统,文档可以被编辑,如何防止多人同时对同一份文档进行编辑更新 说出数据连接池的工作机制是什么 怎么获取一个文件中单词出现的最高频率 描述一下你最常用的编程风格 如果有机会重新设计你们的产品,你会怎么做 如何搭建一个高可用系统 如何启动时不需输入用户名与密码 如何在基于Java的Web项目中实现文件上传和下载 如何实现一个秒杀系统,保证只有几位用户能买到某件商品。 如何实现负载均衡,有哪些算法可以实现 如何设计一个购物车?想想淘宝的购物车如何实现的 如何设计一套高并发支付方案,架构如何设计 如何设计建立和保持 100w 的长连接 如何避免浏览器缓存。 如何防止缓存雪崩 如果AB两个系统互相依赖,如何解除依 如果有人恶意创建非法连接,怎么解决 如果有几十亿的白名单,每天白天需要高并发查询,晚上需要更新一次,如何设计这个功能 如果系统要使用超大整数(超过long长度范围),请你设计一个数据结构来存储这种超大型数字以及设计一种算法来实现超大整数加法运算) 如果要设计一个图形系统,请你设计基本的图形元件(Point,Line,Rectangle,Triangle)的简单实现 如果让你实现一个并发安全的链表,你会怎么做 应用服务器与WEB 服务器的区别?应用服务器怎么监控性能,各种方式的区别?你使用过的应用服务器优化技术有哪些 大型网站在架构上应当考虑哪些问题 有没有处理过线上问题?出现内存泄露,CPU利用率标高,应用无响应时如何处理的 最近看什么书,印象最深刻的是什么 描述下常用的重构技巧 你使用什么版本管理工具?分支(Branch)与标签(Tag)之间的区别在哪里 你有了解过存在哪些反模式(Anti-Patterns)吗 你用过的网站前端优化的技术有哪些 如何分析Thread dump 你如何理解AOP中的连接点(Joinpoint)、切点(Pointcut)、增强(Advice)、引介(Introduction)、织入(Weaving)、切面(Aspect)这些概念 你是如何处理内存泄露或者栈溢出问题的 你们线上应用的 JVM 参数有哪些 怎么提升系统的QPS和吞吐量 知识面 解释什么是 MESI 协议(缓存一致性) 谈谈 reactor 模型 Java 9 带来了怎样的新功能 Java 与 C++ 对比,C++ 或 Java 中的异常处理机制的简单原理和应用 简单讲讲 Tomcat 结构,以及其类加载器流程 虚拟内存是什么 阐述下 SOLID 原则 请简要讲一下你对测试驱动开发(TDD)的认识 CDN实现原理 Maven 和 ANT 有什么区别 UML中有哪些常用的图 Linux Linux 下 IO 模型有几种,各自的含义是什么。 Linux 系统下你关注过哪些内核参数,说说你知道的 Linux 下用一行命令查看文件的最后五行 平时用到哪些 Linux 命令 用一行命令输出正在运行的 Java 进程 使用什么命令来确定是否有 Tomcat 实例运行在机器上 什么是 N+1 难题 什么是 paxos 算法 什么是 restful,讲讲你理解的 restful 什么是 zab 协议 什么是领域模型(domain model)?贫血模型(anaemic domain model) 和充血模型(rich domain model)有什么区别 什么是领域驱动开发(Domain Driven Development) 介绍一下了解的 Java 领域的 Web Service 框架 Web Server、Web Container 与 Application Server 的区别是什么 微服务(MicroServices)与巨石型应用(Monolithic Applications)之间的区别在哪里 描述 Cookie 和 Session 的作用,区别和各自的应用范围,Session工作原理 你常用的持续集成(Continuous Integration)、静态代码分析(Static Code Analysis)工具有哪些 简述下数据库正则化(Normalizations) KISS,DRY,YAGNI 等原则是什么含义 分布式事务的原理,优缺点,如何使用分布式事务? 布式集群下如何做到唯一序列号 网络 HTTPS 的加密方式是什么,讲讲整个加密解密流程 HTTPS和HTTP的区别 HTTP连接池实现原理 HTTP集群方案 Nginx、lighttpd、Apache三大主流 Web服务器的区别 是否看过框架的一些代码 持久层设计要考虑的问题有哪些?你用过的持久层框架有哪些 数值提升是什么 你能解释一下里氏替换原则吗 你是如何测试一个应用的?知道哪些测试框架 传输层常见编程协议有哪些?并说出各自的特点 编程题 计算加班费 加班10小时以下加班费是时薪的1.5倍。加班10小时或以上,按4元/时算。提示:(一个月工作26天,一天正常工作8小时) 计算1000月薪,加班9小时的加班费 计算2500月薪,加班11小时的加班费 计算1000月薪,加班15小时的加班费 卖东西 一家商场有红苹果和青苹果出售。(红苹果5元/个,青苹果4元/个)。 模拟一个进货。红苹果跟青苹果各进200个。 模拟一个出售。红苹果跟青苹果各买出10个。每卖出一个苹果需要进行统计。 提示:一个苹果是一个单独的实体。 日期提取 有这样一个时间字符串:2008-8-8 20:08:08 , 请编写能够匹配它的正则表达式,并编写Java代码将日期后面的时分秒提取出来,即:20:08:08 线程 8设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 用Java写一个多线程程序,如写四个线程,二个加1,二个对一个变量减一,输出 wait-notify 写一段代码来解决生产者-消费者问题 数字 判断101-200之间有多少个素数,并输出所有素数 用最有效率的方法算出2乘以17等于多少 有 1 亿个数字,其中有 2 个是重复的,快速找到它,时间和空间要最优 2 亿个随机生成的无序整数,找出中间大小的值 10 亿个数字里里面找最小的 10 个 1到1亿的自然数,求所有数的拆分后的数字之和,如286 拆分成2、8、6,如1到11拆分后的数字之和 => 1 + … + 9 + 1 + 0 + 1 + 1 一个数如果恰好等于它的因子之和,这个数就称为 “完数 “。例如6=1+2+3.编程 找出1000以内的所有完数 一个数组中所有的元素都出现了三次,只有一个元素出现了一次找到这个元素 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? 求100-1000内质数的和 求1到100的和的平均数 求s=a+a+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 求出1到100的和 算出1到40的质数,放进数组里 显示放组里的数 找出第[5]个数 删除第[9]个数,再显示删除后的第[9]个 有 3n+1 个数字,其中 3n 个中是重复的,只有 1 个是不重复的,怎么找出来。 有一组数1.1.2.3.5.8.13.21.34。写出程序随便输入一个数就能给出和前一组数字同规律的头5个数 计算指定数字的阶乘 开发 Fizz Buzz 给定一个包含 N 个整数的数组,找出丢失的整数 一个排好序的数组,找出两数之和为m的所有组合 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 打印出所有的 “水仙花数 “,所谓 “水仙花数 “是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 “水仙花数 “,因为153=1的三次方+5的三次方+3的三次方 原地交换两个变量的值 找出4字节整数的中位数 找到整数的平方根 实现斐波那契 网络 用Java Socket编程,读服务器几个字符,再写入本地显示 反射 反射机制提供了什么功能? 反射是如何实现的 哪里用到反射机制 反射中 Class.forName 和 ClassLoader 区别 反射创建类实例的三种方式是什么 如何通过反射调用对象的方法 如何通过反射获取和设置对象私有字段的值 反射机制的优缺点 数据库 写一段 JDBC 连Oracle的程序,并实现数据查询 算法 50个人围坐一圈,当数到三或者三的倍数出圈,问剩下的人是谁,原来的位置是多少 实现一个电梯模拟器用 写一个冒泡排序 写一个折半查找 随机产生20个不能重复的字符并排序 写一个函数,传入 2 个有序的整数数组,返回一个有序的整数数组 写一段代码在遍历 ArrayList 时移除一个元素 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少 约瑟芬环游戏 正则 请编写一段匹配IP地址的正则表达式 写出一个正则表达式来判断一个字符串是否是一个数字 字符串 写一个方法,入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数。 写一个程序找出所有字符串的组合,并检查它们是否是回文串 写一个字符串反转函数,输入abcde转换成edcba代码 小游戏,倒转句子中的单词 将GB2312编码的字符串转换为ISO-8859-1编码的字符串 请写一段代码来计算给定文本内字符“A”的个数。分别用迭代和递归两种方式 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个” 给定 2 个包含单词列表(每行一个)的文件,编程列出交集 打印出一个字符串的所有排列 将一个键盘输入的数字转化成中文输出(例如:输入1234567,输出:一百二拾三万四千五百六拾七) 在Web应用开发过程中经常遇到输出某种编码的字符,如从 GBK 到 ISO8859-1等,如何输出一个某种编码的字符串 日期 计算两个日期之间的差距 欢迎工作一到五年的Java工程师朋友们加入Java填坑之路:860113481 群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

优秀的个人博客,低调大师

BAT等公司必问的8道Java经典面试题,你都会了吗?

工作多年以及在面试中,我经常能体会到,有些面试者确实是认真努力工作,但坦白说表现出的能力水平却不足以通过面试,通常是两方面原因: 1、“知其然不知其所以然”。做了多年技术,开发了很多业务应用,但似乎并未思考过种种技术选择背后的逻辑。坦白说,我并不放心把具有一定深度的任务交给他。 2、知识碎片化,不成系统。在面试中,面试者似乎无法完整、清晰地描述自己所开发的系统,或者使用的相关技术。平时可能埋头苦干,或者过于死磕某个实现细节,并没有抬头审视这些技术。 前人已经掉过的坑,后来的同学就别再“前仆后继”了! Java基础 1、谈谈你对 Java 平台的理解?“Java 是解释执行”,这句话正确吗? 考点分析: 对于这类笼统的问题,你需要尽量表现出自己的思维深入并系统化,Java 知识理解得也比较全面,一定要避免让面试官觉得你是个“知其然不知其所以然”的人。毕竟明白基本组成和机制,是日常工作中进行问题诊断或者性能调优等很多事情的基础,相信没有招聘方会不喜欢“热爱学习和思考”的面试者。 回归正题,对于 Java 平台的理解,可以从很多方面简明扼要地谈一下,例如:Java 语言特性,包括泛型、Lambda 等语言特性;基础类库,包括集合、IO/NIO、网络、并发、安全等基础类库。对于我们日常工作应用较多的类库,面试前可以系统化总结一下,有助于临场发挥。 下图是我总结的一个相对宽泛的蓝图供你参考。 2、请对比 Exception 和 Error,另外,运行时异常与一般异常有什么区别? 考点分析: 分析 Exception 和 Error 的区别,是从概念角度考察了 Java 处理机制。总的来说,还处于理解的层面,面试者只要阐述清楚就好了。 我们在日常编程中,如何处理好异常是比较考验功底的,我觉得需要掌握两个方面。 第一,理解 Throwable、Exception、Error 的设计和分类。比如,掌握那些应用最为广泛的子类,以及如何自定义异常等。 很多面试官会进一步追问一些细节,比如,你了解哪些 Error、Exception 或者 RuntimeException?我画了一个简单的类图,并列出来典型例子,可以给你作为参考,至少做到基本心里有数。 第二,理解 Java 语言中操作 Throwable 的元素和实践。掌握最基本的语法是必须的,如 try-catch-finally 块,throw、throws 关键字等。与此同时,也要懂得如何处理典型场景。 3、谈谈 Java 反射机制,动态代理是基于什么原理? 考点分析: 这个题目给我的第一印象是稍微有点诱导的嫌疑,可能会下意识地以为动态代理就是利用反射机制实现的,这么说也不算错但稍微有些不全面。功能才是目的,实现的方法有很多。 总的来说,这道题目考察的是 Java 语言的另外一种基础机制: 反射,它就像是一种魔法,引入运行时自省能力,赋予了 Java 语言令人意外的活力,通过运行时操作元数据或对象,Java 可以灵活地操作运行时才能确定的信息。而动态代理,则是延伸出来的一种广泛应用于产品开发中的技术,很多繁琐的重复编程,都可以被动态代理机制优雅地解决。 从考察知识点的角度,这道题涉及的知识点比较庞杂,所以面试官能够扩展或者深挖的内容非常多,比如: 考察你对反射机制的了解和掌握程度。 动态代理解决了什么问题,在你业务系统中的应用场景是什么? JDK 动态代理在设计和实现上与 cglib 等方式有什么不同,进而如何取舍? 4、Java 提供了哪些 IO 方式? NIO 如何实现多路复用? 在实际面试中,从传统 IO 到 NIO、NIO 2,其中有很多地方可以扩展开来,考察点涉及方方面面,比如: 基础 API 功能与设计, InputStream/OutputStream 和 Reader/Writer 的关系和区别。 NIO、NIO 2 的基本组成。 给定场景,分别用不同模型实现,分析 BIO、NIO 等模式的设计和实现原理。 NIO 提供的高性能数据操作方式是基于什么原理,如何使用? 或者,从开发者的角度来看,你觉得 NIO 自身实现存在哪些问题?有什么改进的想法吗? IO 的内容比较多,专栏一讲很难能够说清楚。IO 不仅仅是多路复用,NIO 2 也不仅仅是异步 IO,尤其是数据操作部分,会在专栏下一讲详细分析。 5、如何保证容器是线程安全的?ConcurrentHashMap 如何实现高效地线程安全? 典型回答: Java 提供了不同层面的线程安全支持。在传统集合框架内部,除了 Hashtable 等同步容器,还提供了所谓的同步包装器(Synchronized Wrapper),我们可以调用 Collections 工具类提供的包装方法,来获取一个同步的包装容器(如 Collections.synchronizedMap),但是它们都是利用非常粗粒度的同步方式,在高并发情况下,性能比较低下。 另外,更加普遍的选择是利用并发包提供的线程安全容器类,它提供了: 各种并发容器,比如 ConcurrentHashMap、CopyOnWriteArrayList。 各种线程安全队列(Queue/Deque),如 ArrayBlockingQueue、SynchronousQueue。 各种有序容器的线程安全版本等。 具体保证线程安全的方式,包括有从简单的 synchronize 方式,到基于更加精细化的,比如基于分离锁实现的 ConcurrentHashMap 等并发实现等。具体选择要看开发的场景需求,总体来说,并发包内提供的容器通用场景,远优于早期的简单同步实现。 6、谈谈接口和抽象类有什么区别? 考点分析: 这是个非常高频的 Java 面向对象基础问题,看起来非常简单的问题,如果面试官稍微深入一些,你会发现很多有意思的地方,可以从不同角度全面地考察你对基本机制的理解和掌握。 比如: 对于 Java 的基本元素的语法是否理解准确。能否定义出语法基本正确的接口、抽象类或者相关继承实现,涉及重载(Overload)、重写(Override)更是有各种不同的题目。 在软件设计开发中妥善地使用接口和抽象类。你至少知道典型应用场景,掌握基础类库重要接口的使用;掌握设计方法,能够在 review 代码的时候看出明显的不利于未来维护的设计。 掌握 Java 语言特性演进。现在非常多的框架已经是基于 Java 8,并逐渐支持更新版本,掌握相关语法,理解设计目的是很有必要的。 Java进阶 7、synchronized 底层如何实现?什么是锁的升级、降级? 考点分析: 今天的问题主要是考察你对 Java 内置锁实现的掌握,也是并发的经典题目。我在前面给出的典型回答,涵盖了一些基本概念。如果基础不牢,有些概念理解起来就比较晦涩,我建议还是尽量理解和掌握,即使有不懂的也不用担心,在后续学习中还会逐步加深认识。 我个人认为,能够基础性地理解这些概念和机制,其实对于大多数并发编程已经足够了,毕竟大部分工程师未必会进行更底层、更基础的研发,很多时候解决的是知道与否,真正的提高还要靠实践踩坑。 后面我会进一步分析: 从源码层面,稍微展开一些 synchronized 的底层实现,并补充一些上面答案中欠缺的细节,有同学反馈这部分容易被问到。如果你对 Java 底层源码有兴趣,但还没有找到入手点,这里可以成为一个切入点。 理解并发包中 java.util.concurrent.lock 提供的其他锁实现,毕竟 Java 可不是只有 ReentrantLock 一种显式的锁类型,我会结合代码分析其使用。 8、synchronized 和 ReentrantLock 有什么区别?有人说 synchronized 最慢,这话靠谱吗? 考点分析: 今天的题目是考察并发编程的常见基础题,我给出的典型回答算是一个相对全面的总结。 对于并发编程,不同公司或者面试官面试风格也不一样,有个别大厂喜欢一直追问你相关机制的扩展或者底层,有的喜欢从实用角度出发,所以你在准备并发编程方面需要一定的耐心。 我认为,锁作为并发的基础工具之一,你至少需要掌握: 理解什么是线程安全。 synchronized、ReentrantLock 等机制的基本使用与案例。 更近一步,你还需要: 掌握 synchronized、ReentrantLock 底层实现;理解锁膨胀、降级;理解偏斜锁、自旋锁、轻量级锁、重量级锁等概念。 掌握并发包中 java.util.concurrent.lock 各种不同实现和案例分析。 典型回答: synchronized 是 Java 内建的同步机制,所以也有人称其为 Intrinsic Locking,它提供了互斥的语义和可见性,当一个线程已经获取当前锁时,其他试图获取的线程只能等待或者阻塞在那里。 在 Java 5 以前,synchronized 是仅有的同步手段,在代码中, synchronized 可以用来修饰方法,也可以使用在特定的代码块儿上,本质上 synchronized 方法等同于把方法全部语句用 synchronized 块包起来。 ReentrantLock,通常翻译为再入锁,是 Java 5 提供的锁实现,它的语义和 synchronized 基本相同。再入锁通过代码直接调用 lock() 方法获取,代码书写也更加灵活。与此同时,ReentrantLock 提供了很多实用的方法,能够实现很多 synchronized 无法做到的细节控制,比如可以控制 fairness,也就是公平性,或者利用定义条件等。但是,编码中也需要注意,必须要明确调用 unlock() 方法释放,不然就会一直持有该锁。 synchronized 和 ReentrantLock 的性能不能一概而论,早期版本 synchronized 在很多场景下性能相差较大,在后续版本进行了较多改进,在低竞争场景中表现可能优于 ReentrantLock。 迎工作一到五年的Java程序员朋友们加入Java架构开发:744677563 本群提供免费的学习指导 架构资料 以及免费的解答 不懂得问题都可以在本群提出来 之后还会有职业生涯规划以及面试指导

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册