当前位置: 首页 > 科技观察

服务器后台开服面试心得

时间:2023-03-20 01:28:45 科技观察

去年这个时候,小编经过两个月的审核,拿到了阿里巴巴的offer。我有一些运气和一些经验。值此跳槽季来临之际,分享给大家。简单梳理一下我的复习思路。同时也希望与大家交流探讨,共同学习。如果我说错了,请大家指正,一起学习。这篇文章既是复习思路,也是学习思路。JAVA的复习我大致分为以下几个方向。虚拟机;排序算法与Java集合&工具类;多线程和并发包;存储相关:Redis、ElasticSearch、MySQL;框架:Spring、SpringMVC、SpringBoot分布式:Dubbo;设计模式;下面简单说一下如何复习上面的内容首先明确一点,小编不会讲解具体的知识点,而是一种思路。看网上的帖子和文章,误导孩子的比较多,所以不是误导孩子,而是推荐和分析知识。单击并专注于阅读。毕竟,这本书是经过多方校对的权威出版读物。JVMJVM是每个开发者必备的技能。推荐阅读国内JVM经典书籍,里面有JVM内存接口、类加载机制等基础知识。你觉得这些在面试中是不是很眼熟?所以对于JVM的知识,与其看网上一些零碎的文章,不如看这本书《深入理解 Java 虚拟机:JVM 高级特性与***实践(第 2 版)》。当然,如果你的英文不错,强烈推荐阅读Oracle***发布的JAVA虚拟机规范。读书时,切记不要急于求成。你知识的积累,不是看书的多少,而是看书的深度。所以,在看每一章的时候,如果看到不懂的地方,就需要结合网上的文章去理解,需要多看几篇文章才能理解,因为一篇文章很可能是错误的。小编认为文章的可信度顺序是自建域名>*.github.io>顺丰>简书=博客园>CSDN>转载排序算法和Java合集,工具类这一类是大家必须掌握和掌握的熟练使用,为什么我把它们放在一起呢?因为工具类和集合类都是从算法派生出来的,所以在准备算法复习之前,你需要明白为什么要考算法。形式上是因为排序算法与我们的编程息息相关。举两个“栗子”。可以看看Collections中的mergeSort和sort方法,会发现mergeSort是归并排序的实现,sort方法结合了归并排序和插入排序,使得sort方法最差O(NlogN)***可以达到O(N)的效果。那么只有了解了排序方法的实现,才能更好的使用JAVA中的集合类呢?第二个“栗子”,TopN问题大家都听说过,面试的时候也经常遇到。请写一下TopN的实现算法,就是一个大topheap。说到JAVA,就是PriorityQueue的一个实现。那么你了解了TopN问题,知道了它的时间复杂度,知道了优缺点,那你就可以熟练的使用JAVA工具了吗?编写更高效的程序?排序算法之所以和JAVA的集合&工具一样重要,是因为它们与我们日常的编程息息相关。面试官总是问排序算法,不是难你,而是考验你的编程功底。所以需要结合JAVA的集合类和工具类,仔细研究排序算法和基本算法,才能更深入地理解它们之间的关系。多线程和并发包的重要性多线程和并发包的重要性就不说了,这里只说学习方法。你首先要明白,多线程不仅仅是Thread和Runnable那么简单。整个并发包下的工具都是服务于多线程的。多线程的学习一定不能看几篇面试文章,或者几个关键词CountDownLatch,锁巴拉巴拉就认为你理解了多线程的本质,小编整理了一张大图,你需要关注这张大图或者自己梳理一张大图,分解里面的类,它们的使用场景,优缺点。当然,你需要查看源代码。源代码是全局中的每个源代码。就像上面说的JVM一样,不要急着马上看,要理解每个地方的why。你会发现它离不开JAVA的集合类和工具类。那么为什么列为重要知识点就不言而喻了。Redis、MySQL、ElasticSearch都是常用的存储工具,比如Redis、MySQL、ElasticSearch。它的知识点分为两个方面,一个是你在日常使用过程中积累的经验,一个是你对它的深入理解。所以对于这个地方的建议是通过书籍来巩固技术知识。《Redis设计与实现 (数据库技术丛书)》、《高性能 MySQL》、《ElasticSearch 权威指南》这三本书不一定是这个领域最好的书,但是如果你理解透彻,对你的知识理解和程序设计一定有很大的帮助。书中内容太多,举两个“栗子”。第一个“栗子”,使用Redis一定不能只作为key-value缓存数据库。小编了解到,它的五种基本类型之一叫做sortedset。当sortedset中item的内容大于64时,同时使用hash和skiplist进行设计实现。这也针对排序和查找性能进行了优化。添加和删??除都需要修改skiplist,所以复杂度为O(log(n))。但是如果只是找元素,可以直接使用hash,其复杂度为O(1),其他范围操作的复杂度一般为O(log(n))。当然,如果小于64,因为它使用了ziplist的设计,它的时间复杂度是O(n)。这样,以后的查询、更新和阅读都会变得更加容易。可以用来满足TopN的要求吗?这种类似的需求不需要你去查数据,然后在内存中计算运算。比如我们简单的周排名和月排名就可以用这个数据结构来实现。当然,这不一定是最好的解决方案,但它提供了一种解决问题的方法。另一个“栗子”,PriorityQueue是一个优先级队列。上面我们已经理解了,所以ElasticSearch的查询也是用来获取每个分片上的优先级队列,然后合并优先级队列。你明白吗?这个“栗子”告诉我们,其实算法是想出来的,看懂了一个,就可以举一反三了。说到框架就想到Spring,说到Spring就想到IOC和AOP。因为大家都在用这个框架,没必要看其他框架,对Spring有更深的了解即可。通过上面的描述,你已经明白了小编的思路,一切都取决于他的实现原理,所以我直接给你推荐一本书《Spring 技术内幕》,然后调试你现有的Spring项目,从请求的流程点梳理知识。spring出来这么久了,基础知识大家也都清楚了。重要的是看它的思路和解决问题的原理。栗子又来了比如你需要在Bean刚初始化的时候做一些操作,是否需要使用InitializingBean?然后怎么用,它的原理是什么,SpringBean的生命周期是什么,通过具体的使用场景一步步讲解。这样复习效果会更好,然后慢慢思考每个知识点涉及的知识点多一些,比如AOP中的Proxy是基于什么原理,它的优缺点是什么。分布式是一个老生常谈的话题,也是近几年的热门话题。说到分布式,肯定和Dubbo有关系,但是不能只理解Dubbo。首先我们要思考它解决的问题,为什么要引入Dubbo这个概念。随着业务的发展和用户数量的增加,系统数量增多,调用依赖变得更加复杂。为了保证系统的高可用和高并发需求,系统架构也逐渐从单体时代向服务SOA时代迁移。Dubbo应运而生。它作为RPC的出现,让我们构建微服务项目变得轻而易举,但我们不必只考虑Dubbo带来的框架支持。同时需要考虑服务的幂等性、分布式事务、服务间的Trace定位、分布式日志、数据对账、重试机制等,同时考虑系统的解耦和共享MQ的压力,以及数据库的分布。部署和分库分表、限流、熔断等机制。所以最后的结论不仅是看Dubbo的使用和原理,还要思考上下游和一些系统设计问题。这方面有很多相关的知识点,可以针对上面抛出的点进行分解。设计模式设计模式有很多,但常用的只有几种。这个地方可以在两个地方准备。1.学以致用,设计模式不是背,而是用。平时多关注当前项目的设计,设计模式是否可以应用,当然首先要了解每个设计模式的含义。2、思考设计模式在现有框架中的体现。我已经讲了如何学习框架。以Spring为例。它使用了9种以上的设计模式。你知道它们用在什么地方吗?如果您不知道,请尝试找到它们并思考它们为什么这样设计。全部找到之后,你就会明白基本设计模式的用法和原理。