服务端开发Java之备战秋招面试篇1

news2024/11/29 2:37:59

在这个面试造火箭工作拧螺丝的时代背景下,感觉不是很好,不过还好也是拿到了还行的offer,准备去实习了,接下来就是边实习边准备秋招了,这半年把(技术栈+八股文面经+算法题+项目)吃透,希望等到秋招可以顺利一点,冲吧。

目录

1.MySQL主从复制实现过程及原理?

2.JVM原理?

3.docker常用命令?

4.Spring自带的线程创建方式?

5.Hashmap的添加、查询、删除原理,扩容原理等?

6.MyBatis-plus级联查询?

7.微服务的优点?springBoot的优点?

8.redis崩了可能是哪些问题?

9.MySQL的可重复读的原理?

10.红黑树的原理?二叉树的遍历的时间复杂度?

11.算法题:连续子数组的最大和

12.算法题:链表中环的入口节点

1.MySQL主从复制实现过程及原理?

MySQL主从复制是MySQL自带的功能,无需借助第三方的工具,它是一个异步复制过程,底层是基于MySQL数据库自带的二进制日志功能,就是多台从库(slave)从一台主库(master)进行日志复制,然后进行日志解析并应用到自身,最终实现从库的主库的一致性,常见的主从同步架构有一主多从、双主多从。 

一主多从架构:

一般是主库负责所有读写请求,而从库只负责容灾恢复和冗余备份。

如果做了读写分离的话,主库负责写请求,从库负责读请求,可以提升数据库性能。

双主多从架构:

一般是主库1负责所有读写请求,主库2不对外提供服务,只用来容灾恢复。

相比一主多从架构,双主多从架构可以减少宕机时间,更快恢复数据库可用状态。

二进制日志(BinLog)记录了所有的数据操作语句和数据定义语句,该日志对于灾难情况出现后的数据恢复起到至关重要的作用,MySQL的主从复制, 就是通过该BinLog实现的。默认MySQL是未开启该日志的。

MySQL主从复制主要分为如下三步,及主从同步原理如下:

第一,主库master将数据变更写入BinLog。

第二,从库slave的IO线程将主库的BinLog拷贝到从库的中继日志(relay log)。

第三,从库SQL线程读取Relay Log文件内容,重新执行SQL语句,将数据更新到他的数据上。

MySQL主从复制的优点?

  1. 读写分离,提升数据库性能。
  2. 容灾恢复,主服务器不可用时,从服务器提供服务,提高可用性。
  3. 冗余备份,主服务器数据损坏丢失,从服务器保留备份。

主从同步延迟问题?主从同步延迟的原因有哪些?主从同步延迟的解决方案?

主从同步最常遇到的问题就是主从同步延迟,可以通过在从库上执行show slave status命令查看延迟时间,Seconds_Behind_Master表示延迟的秒数。

延迟原因:
1)从库性能差,在主库进行读写操作。

2)从库的压力相对较大,读的操作多于写的操作。

3)网络延迟,从库去拷贝主库的BinLog的时候发生网络延迟。 

4)当主库有大的事务,当主库有大事务,从库进行拷贝BinLog的时候执行时间较长。

主从同步延迟的解决方案:

1)把从库换成跟主库同等规格的机器。

2)多搞几台从库,分担读请求压力。

3)联系运维或者云服务提供商解决.

4)把大事务分割成小事务执行,大事务不但会产生从库延迟,还可能产生死锁,降低数据库并发性能,所以尽量少用大事务。

如何提升主从同步性能?

1)从库开启多线程复制

在主从同步的最后两步使用多线程,修改配置 slave_parallel_workers=4,代表开启4个复制线程。

2)修改同步模式,改为异步,如果对数据安全性要求没那么高,可以把同步模式改成半同步复制或者异步复制。

主从同步共有三种复制方式:

全同步复制

当主库执行完一个事务,并且所有从库都执行完该事务后,才给客户端返回成功。

半同步复制

至少有一个从库执行完成后,就给客户端返回成功。

异步复制

主库执行完后,立即返回成功,不关心从库是否执行完成。


3)修改从库Bin Log配置

2.JVM原理?

我的总结:

JVM即Java虚拟机,java编译器编译生成字节码文件给JVM。通过JVM将每一条指令翻译成不同平台机器码,通过特定平台运行。JVM的声明周期:诞生->运行->消亡。

JVM的内存结构包括五大区域:程序计数器、虚拟机栈、本地方法栈、堆区、方法区。

参考这篇:JVM原理-超详细总结_伟呀呀呀呀的博客-CSDN博客_jvm原理

3.docker常用命令?

docker常用命令主要包括,基础命令,镜像命令,容器命令,运维命令等,具体可以参考这篇博文:docker 常用命令大全_保护我方胖虎的博客-CSDN博客_docker常用命令

SpringCloud之微服务实用篇3-docker_nuist__NJUPT的博客-CSDN博客

4.Spring自带的线程创建方式?

使用springboot自带@Async注解创建异步线程,为了让@Async注解能够生效,还需要在Spring Boot的主程序中配置@EnableAsync。

Java中有三种常见的线程常见方式以及线程池的创建方式。

5.Hashmap的添加、查询、删除原理,扩容原理等?

HashMap的数据结构:JDK1.7及以前:链表+数组  JDK1.8:数组+链表+红黑树

我们常见的有数据结构有三种结构:1、数组结构 2、链表结构 3、哈希表结构 。我们来看看各自的数据结构的特点:数组结构: 存储区间连续、内存占用严重、空间复杂度大。存储区间离散、占用内存宽松、空间复杂度小。结合数组结构和链表结构的优点,从而实现了查询和修改效率高,插入和删除效率也高的一种数据结构。

HashMap中的put()和get()和rmove()的实现原理:

map.put(k,v)实现原理:
(1)首先将k,v封装到Node对象当中(节点)。
(2)然后它的底层会调用K的hashCode()方法得出hash值。
(3)通过哈希表函数/哈希算法,将hash值转换成数组的下标,下标位置上如果没有任何元素,就把Node添加到这个位置上。如果说下标对应的位置上有链表。链表上每个节点的k进行equal。如果所有的equals方法返回都是false,那么这个新的节点将被添此时,就会拿着k和加到链表的末尾。如其中有一个equals返回了true,那么这个节点的value将会被覆盖。

map.get(k)实现原理:
(1)先调用k的hashCode()方法得出哈希值,并通过哈希算法转换成数组的下标。
(2)通过上一步哈希算法转换成数组的下标之后,在通过数组下标快速定位到某个位置上。如果这个位置上什么都没有,则返回null。如果这个位置上有单向链表,那么它就会拿着K和单向链表上的每一个节点的K进行equals,如果所有equals方法都返回false,则get方法返回null。如果其中一个节点的K和参数K进行equals返回true,那么此时该节点的value就是我们要找的value了,get方法最终返回这个要找的value。
map.remove(k)实现原理:

1)先调用k的hashCode()方法得出哈希值,并通过哈希算法转换成数组的下标。

2)确定了数组下标位置,查找到要删除的节点,链表的删除比较简单,但是红黑树的删除较为麻烦,涉及到树的再平衡问题。

相比 jdk1.7 的 HashMap 而言,jdk1.8最重要的就是引入了红黑树的设计,当hash表的单一链表长度超过 8 个的时候,链表结构就会转为红黑树结构。

为什么要这样设计呢?好处就是避免在最极端的情况下链表变得很长很长,在查询的时候,效率会非常慢。

  • 红黑树查询:其访问性能近似于折半查找,时间复杂度 O(logn);
  • 链表查询:这种情况下,需要遍历全部元素才行,时间复杂度 O(n);

红黑树是一种近似平衡的二叉查找树,其主要的优点就是“平衡“,即左右子树高度几乎一致,以此来防止树退化为链表,通过这种方式来保障查找的时间复杂度为 log(n)。

HashMap的扩容原理:

扩容机制核心方法Node<K,V>[] resize()
    HashMap扩容可以分为三种情况:

JDK1.7和JDK1.8的扩容原理不同,参照这篇博客:HashMap之扩容原理_hashmap扩容_Mr_yeml的博客-CSDN博客

6.MyBatis-plus级联查询?

一对一,一对多,和多对多的级联查询,在mybatis中在XML文件中写SQL语句进行查询,查询结果用resultMap进行封装。

在MP中进行级联查询的话,主要借助resultMap定义级联查询,在实体类上注解属性指定resultMap的id,添加级联表映射类的对象属性,来完成的。这样在调用Mybatis公共服务接口、公共映射器接口,返回对象时,自动完成级联查询,体现了MybatisPlus编码高效的优势。
 

7.微服务的优点?springBoot的优点?

微服务的优点:

1、易于开发和维护

由于微服务单个模块就相当于一个项目,开发这个模块我们就只需关心这个模块的逻辑即可,代码量和逻辑复杂度都会降低,从而易于开发和维护。

2、启动较快

这是相对单个微服务来讲的,相比于启动单体架构的整个项目,启动某个模块的服务速度明显是要快很多的。

3、局部修改容易部署

在开发中发现了一个问题,如果是单体架构的话,我们就需要重新发布并启动整个项目,非常耗时间,但是微服务则不同,哪个模块出现了bug我们只需要解决那个模块的bug就可以了,解决完bug之后,我们只需要重启这个模块的服务即可,部署相对简单,不必重启整个项目从而大大节约时间。

4、技术栈不受限

比如订单微服务和电影微服务原来都是用java写的,现在我们想把电影微服务改成nodeJs技术,这是完全可以的,而且由于所关注的只是电影的逻辑而已,因此技术更换的成本也就会少很多。

5、按需伸缩

我们上面说了单体架构在想扩展某个模块的性能时不得不考虑到其它模块的性能会不会受影响,对于我们微服务来讲,完全不是问题,电影模块通过什么方式来提升性能不必考虑其它模块的情况。

缺点:运维和部署的复杂性。

8.redis崩了可能是哪些问题?

本质就是缓存穿透,缓存雪崩,缓存击穿。

Redis中的缓存穿透、雪崩、击穿的原因以及解决方案(详解)_redis的雪崩和击穿_PeakXYH的博客-CSDN博客

9.MySQL的可重复读的原理?

使用MVCC(多版本并发控制)。

10.红黑树的原理?二叉树的遍历的时间复杂度?

我们先看一下红黑树,JDK1.8在hashMap中加入红黑树,防止链表太长,造成查询性能差的问题。我们先看一下二叉树,排序二叉树和平衡二叉树。

二叉树指的是每个节点最多只能有两个字数的有序树。通常左边的子树称为左子树 ,右边的子树称为右子树 。这里说的有序树强调的是二叉树的左子树和右子树的次序不能随意颠倒。

所谓排序二叉树,顾名思义,排序二叉树是有顺序的,它是一种特殊结构的二叉树,我们可以对树中所有节点进行排序和检索。

  • 若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
  • 若她的右子树不空,则右子树上所有节点的值均大于它的根节点的值;
  • 具有递归性,排序二叉树的左子树、右子树也是排序二叉树。

排序二叉树的左子树上所有节点的值小于根节点的值,右子树上所有节点的值大于根节点的值,当我们插入一组元素正好是有序的时候,这时会让排序二叉树退化成链表。

为了解决排序二叉树在特殊情况下会退化成链表的问题(链表的检索效率是 O(n) 相对正常二叉树来说要差不少),所以有人发明了平衡二叉树红黑树类似的平衡树。

平衡二叉数又被称为 AVL 树,AVL 树的名字来源于它的发明作者 G.M. Adelson-Velsky 和 E.M. Landis,取自两人名字的首字母。

官方定义:它或者是一颗空树,或者具有以下性质的排序二叉树:它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。

两个条件:

  • 平衡二叉树必须是排序二叉树,也就是说平衡二叉树他的左子树所有节点的值必须小于根节点的值,它的右子树上所有节点的值必须大于它的根节点的值。
  • 左子树和右子树的深度之差的绝对值不超过1。

其实红黑树和上面的平衡二叉树类似,本质上都是为了解决排序二叉树在极端情况下退化成链表导致检索效率大大降低的问题,红黑树最早是由 Rudolf Bayer 于 1972 年发明的。

红黑树首先肯定是一个排序二叉树,它在每个节点上增加了一个存储位来表示节点的颜色,可以是 RED 或 BLACK 。红黑树有下面5个特性。

  • 性质1:每个节点要么是红色,要么是黑色。
  • 性质2:根节点永远是黑色的。
  • 性质3:所有的叶子节点都是空节点(即null),并且是黑色的。
  • 性质4:每个红色节点的两个子节点都是黑色。(从每个叶子到根的路径上不会有两个连续的红色节点。)
  • 性质5:从任一节点到其子树中每个叶子节点的路径都包含相同数量的黑色节点。

红黑树在最差情况下,最长的路径都不会比最短的路径长出两倍。其实红黑树并不是真正的平衡二叉树,它只能保证大致是平衡的,因为红黑树的高度不会无限增高,在实际应用用,红黑树的统计性能要高于平衡二叉树,但极端性能略差。

红黑树参考这篇就可以:红黑树与平衡二叉树_百图详解红黑树_小吴先森的博客-CSDN博客

前序,中序,后序遍历:时间复杂度O(n), 空间复杂度O(n)(递归本身占用stack空间或者用户自定义的stack)
DFS,BFS:时间复杂度O(n),空间复杂度O(n)(递归本身占用stack空间或者用户自定义的stack)
在最坏情况下,当二叉树中每个节点只有一个孩子节点时,递归的层数为 N,此时空间复杂度为 O(N)。在最好情况下,当二叉树为平衡二叉树时,它的高度为 log⁡(N),此时空间复杂度为 O(log⁡(N))。

11.算法题:连续子数组的最大和

题目链接:连续子数组的最大和_牛客题霸_牛客网

贪心的思路,不需要额外开辟数组,直接一层循环遍历,之前累加的值累加到当前,比当前大,就即继续累加,否则,从当前开始继续累加,累加过程中找出一个最大值就可以了。

public class Solution {
    public int FindGreatestSumOfSubArray(int[] array) {
       //最好保证时间复杂度为O(n),空间复杂度为O(1)
       int sum = array[0] ;
       int max = array[0] ;
       for(int i=1; i<array.length; i++){
        if(sum + array[i] > array[i]){
            sum += array[i] ;
        }else{
            sum = array[i] ;
        }
          max = sum > max ? sum : max ;
       }
       return max ;
       
    }
}

12.算法题:链表中环的入口节点

题目链接:链表中环的入口结点_牛客题霸_牛客网

使用快慢指针的方法,定义一个快指针,一个慢指针,快指针一次走两步,慢指针一次走一步,两个指针第一次相遇的地方,距离出口的位置和从其实节点到出口的位置距离相同。

/*
 public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {

    public ListNode EntryNodeOfLoop(ListNode pHead) {
      ListNode fast = pHead ;
      ListNode slow = pHead ;
      if(fast == null || fast.next == null || fast.next.next == null){
        return null ; //无环
      }
      while(fast != null ){
        slow = slow.next ;
        fast = fast.next.next ;
        if(slow == fast){
            break ;
        }
      }
      if(fast == null){
        return null ;
      }
      fast = pHead ;
      while(slow != fast){ 
        slow =slow.next ; 
        fast = fast.next ;
      }
      return fast ;

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/364005.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

打破数据孤岛,Apache Doris 助力纵腾集团快速构建流批一体数仓架构|最佳实践

福建纵腾网络有限公司&#xff08;简称“纵腾集团”&#xff09;成立于 2009 年&#xff0c; 以“全球跨境电商基础设施服务商”为企业定位&#xff0c;聚焦跨境仓储与物流&#xff0c; 为全球跨境电商商户、出口贸易企业、出海品牌商提供海外仓储、商业专线物流、定制化物流等…

【C++】vector 模拟实现

vectorvector 容器vector 基本使用vector 定义库中各类接口的使用迭代器容量相关接口元素访问相关接口元素修改相关接口模拟实现 vector前期准备构造与析构赋值运算符重载迭代器相关容量相关元素访问相关元素的修改相关二维数组的创建对于自定义类型数据的测试vector 容器 C S…

Python实战之小说下载神器(二)整本小说下载:看小说不用这个程序,我实在替你感到可惜*(小说爱好者必备)

前言 这次的是一个系列内容给大家讲解一下何一步一步实现一个完整的实战项目案例系列之小说下载神器&#xff08;二&#xff09;&#xff08;GUI界面化程序&#xff09; 单章小说下载保存数据——整本小说下载 你有看小说“中毒”的经历嘛&#xff1f;小编多多少少还是爱看小说…

基于react+nodejs+mysql开发用户中心,用于项管理加入的项目的用户认证

基于reactnodejsmysql开发用户中心&#xff0c;用于项管理加入的项目的用户认证用户中心功能介绍页面截图后端采用架构user表projects表project_user表仓库地址用户中心功能介绍 用户中心项目&#xff0c;用于统一管理用户信息、登录、注册、鉴权等 功能如下&#xff1a; 用…

[qiankun]实战问题汇总

[qiankun]实战问题汇总ERROR SyntaxError: Cannot use import statement outside a module问题分析解决方案子应用命名问题问题分析解决方案jsonpFunction详细错误信息问题分析解决方案微应用的注册问题Uncaught Error: application cli5-beta6-test-name died in status LOADI…

2月,真的不要跳槽。

新年已经过去&#xff0c;马上就到金三银四跳槽季了&#xff0c;一些不满现状&#xff0c;被外界的“高薪”“好福利”吸引的人&#xff0c;一般就在这时候毅然决然地跳槽了。 在此展示一套学习笔记 / 面试手册&#xff0c;年后跳槽的朋友可以好好刷一刷&#xff0c;还是挺有必…

Zebec官方辟谣“我们与Protradex没有任何关系”

近日&#xff0c;流支付协议Zebec Protocol在其官方推特上&#xff0c;发表了一个辟谣澄清声明。该条推特推文表示&#xff0c;“Zebec 与 Protradex 没有任何关系或产生关联。他们&#xff08; Protradex &#xff09;声称Zebec 生态正在支持他们&#xff0c;但这是错误的。随…

上海亚商投顾:沪指失守3300点 卫星导航概念全天强势

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。市场情绪指数早间低开后震荡回升&#xff0c;沪指盘中一度翻红&#xff0c;随后又再度走低&#xff0c;创业板指午后跌近1%。…

基于GIS计算降雨侵蚀力R因子

一、数据来源介绍 &#xff08;一&#xff09;行政边界数据 本文所用到的河北唐山行政边界数据来源于中国科学院资源环境科学与数据中心&#xff08;https://www.resdc.cn/Default.aspx&#xff09;。 &#xff08;二&#xff09;降水量数据 本文所用到的降水量数据来源于国家…

【Java基础 下】 025 -- 阶段项目(斗地主)

目录 斗地主 一、斗地主游戏1 -- 准洗发&#xff08;控制台版&#xff09; 1、准备牌 2、洗牌 3、发牌 4、看牌 二、斗地主游戏2 -- 给牌排序①&#xff08;利用序号进行排序&#xff09; 2、洗牌 3、发牌 4、看牌 三、斗地主游戏2 -- 给牌排序②&#xff08;给每一张牌计算价值…

118.Android 简单的分组列表(BaseRecyclerViewAdapterHelper)

//1.第一步 导入依赖库&#xff1a; //RecyclerView implementation com.android.support:recyclerview-v7:28.0.0 //RecyclerAdapter implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.28 //2.第二步 新建SectionActivity页面&#xff1a; //manifest…

【第一章:Spring概述、特点、IOC容器、IOC操作bean管理(基于xml方式)】

第一章&#xff1a;Spring概述、特点、IOC容器、IOC操作bean管理&#xff08;基于xml方式&#xff09; 1.Spring是什么&#xff1f; ①Spring是一款主流的java EE 轻量级开源框架。 ②广义的Spring&#xff1a;Spring技术栈&#xff0c;Spring不再是一个单纯的应用框架&#x…

Centos7+Xshell+Jenkins堆装

windows系统崩坏&#xff0c;重装测试类工具&#xff0c;心情崩了 windows硬盘损坏前&#xff0c;运行应用具慢。。。。。。慢着慢着就走了 从前部署在本地的jenkins&#xff0c;python&#xff0c;gitblit等相关脚本都凉透了&#xff0c;所以这次把服务部署到Centos7上…

数学小课堂:数学的线索(从猜想到定理再到应用的整个过程)

文章目录 引言I 勾股定理1.1 勾三股四弦五1.2 数学和自然科学的三个本质差别1.3 总结引言 从猜想到定理再到应用的整个过程是数学发展和体系构建常常经历的步骤。 I 勾股定理 勾股定理: 直角三角形两条直角边的平方之和等于斜边的平方,这个定理在国外都被称为毕达哥拉斯定理…

空间复杂度(超详解+例题)

全文目录引言空间复杂度例题test1test2&#xff08;冒泡排序&#xff09;test3&#xff08;求阶乘&#xff09;test4&#xff08;斐波那契数列&#xff09;总结引言 在上一篇文章中&#xff0c;我们提到判断一个算法的好坏的标准是时间复杂度与空间复杂度。 时间复杂度的作用…

微服务系统启动,环境从0开始的搭建过程

1. JDK的下载安装&#xff08;傻瓜式&#xff09; 安装过程傻瓜式&#xff0c;直接一步到位。我安装的版本为&#xff1a;jdk-17_windows-x64_bin 2. 集成开发工具的下载安装&#xff1a;IDEA&#xff08;傻瓜式&#xff09; ideaIU-2021.2.1 网上资源很多&#xff0c;自己找…

jsp在线考试系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 在线考试系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5 开发&#xff0c;数据库为Mysql&#xff0c;使用j…

计算机操作系统和进程

✨个人主页&#xff1a;bit me&#x1f447; ✨当前专栏&#xff1a;Java EE初阶&#x1f447; ✨每日一语&#xff1a;心平能愈三千疾&#xff0c;心静可通万事理。 目 录&#x1f42c;一. 操作系统&#x1f366;1. 操作系统是什么&#xff1f;&#x1f368;2. 操作系统的两个…

Hot 100 | 79. 单词搜索、200. 岛屿数量

LeetCode 79. 单词搜索 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格…

GPT-4——比GPT-3强100倍

GPT-4——比GPT-3强100倍 当前世界上最强大的人工智能系统当属ChatGPT。推出2个月用户数就突破1亿。ChatGPT是当下最炙手可热的话题&#xff0c;科技圈几乎人人都在讨论。这边ChatGPT的热度还在不断攀升&#xff0c;另一边来自《纽约时报》的最新报道称ChatGPT即将被自家超越&…