面经学习(上海旭千实习)

个人总结

  难度中等,Java的基础部分有点忘了,还有那个token的实现流程也有点给忘了,项目问的比较少,还是要注重Java基础部分的复习。 

1.jdk8和jdk7有什么区别呢?

  1.   jdk8的新特性主要就是流式编程和lambda,区别上主要就是源码的优化,我比较了解的就是hashMap的底层优化。
  2.   在jdk7时,hashMap解决hash冲突主要就是通过拉链法来解决的,也就是通过链表来解决的,缺点很明显,在hash冲突多的时候就会出现斜树的问题,事件复杂度为O(N),在jdk8之后就是使用链表+红黑树来解决hash冲突的问题。在链表的长度大于等于8且hash数组的容量大于等于64的时候将链表转换为红黑树,将时间复杂度控制在O(logN)。
  3.   还有一个就是在jdk7的时候hashMap进行扩容的时候会存在死锁的问题。在进行链表插入的时候使用头插法。因为在扩容的时候涉及到数组数据的移动赋值,当两个线程同时进行移动赋值的时候,链表就会出现闭环的问题,在jdk8之后就使用尾插法来解决这个死锁的问题。

2.你刚刚说到hashMap扩容死锁的问题,解释一下闭环是怎么现成的呢?

  我就举个例子,现在我们有两个现线程都要去进行移动赋值,当前链表中有数据A和B,有两个指针分别指向当前节点及下一个节点。线程一先进行赋值的操作,因为头插法的实现,导致B指向A,在线程2进行头插法的时候就会出现死循环,最终导致死锁的问题。

3.==和equals的区别?

  equals是String中实现判断相等的方法,==主要就是去判断实例的引用地址是否相同,而equals主要就是判断两个实例中数据的值是否相等,无效考虑地址的问题。在执行速度上==的速度会快很多,因为只需要判断引用地址即可。

4. 重写和重载的方法有什么区别?

  1.   作用域方面,重写方法主要就是发生在子类去继承接口时,而重构方法主要发生在同一个类中。 
  2.   在格式方面,重写方法必须保证方法的返回类型,形参,返回类型相同,但是当抽象方法的被final或者static修饰的时候不能别重写。而重构方法只需要保证方法的名字相同。

*5.接口和抽象类有什么区别?

  1.   在方法的编写方面,接口中只能编写抽象的方法,而在抽象接口中既可以编写抽象方法也可以编写普通的方法。
  2.   在类的继承和实现方面,接口可以同时继承多个接口,抽象方法只能继承一个类但是可以同时实现多个就接口。
  3.   在类定义变量的方面,抽象类可以定义普通的变量,接口只能定义的静态变量,在接口的抽象方法中,如果该抽象方法被final或static修饰的话就不能被实现。

*6.final关键值的作用?

  1.   当final修饰类的时候,该类从创建到销毁的整个过程变量的值都不会发生改变。
  2.   当final修饰形参的时候,该形参的引用在方法中执行的整个过程中都不会发生改变。
  3.   当final修饰方法的时候,在该类被继承或者接口被实现的时候都不能被重写。
  4.   当final修饰类的时候,说明该类不能被继承。

7.set和List有什么区别?

  1.   从结构方面,set存储无序不重复的集合,List存储有序的集合。
  2.   从实现类方面,set主要的实现类就是HashSet,而List主要的实现类就是ArrayList和LinkedLIst。
  3.   HashSet的底层结构主要就是HashMap,基于hash表+链表+红黑树实现的,在扩容的时候会扩容为原来的2倍,而ArrayList的底层使用动态数组实现的,在扩容的时候扩容为原来的1.5倍。

8.有了解过线程周期吗?

  在线程线程刚刚创建的时候就是新建状态。在线程执行任务的时候就是可执行状态,当线程获取锁失败的时候就是堵塞状态,在线程调用wait方法就是等待状态,当线程调用sleep方法的时候就是计时等待状态,在线程进行销毁的时候就是终止状态。

9.什么是死锁有了解过吗?

  最常见的死锁就是线程间获取锁的死锁问题,现在有两个线程和两个锁A,B,线程一获取到A锁,线程二获取到B锁,两者都需要获取对方的锁,但是呢,双方都没有进行先进行解锁导致相互等待,最终导致死锁问题的发生,当然像我前面说的hashMap在jdk7之前也存在扩容死锁的问题。

10.单例和多例有了解过吗?

  单例模式最典型的实现就是ioc容器,在每次回去容器中实例类的时候,这个类默认就是一个单例,也就是该类是同一个类。当然ioc也可以通过scope设置为多例模式,也就是在每次获取实例类的时候会新建一个类返回。

11.反射有了解过吗?

  1.   我们可以通过反射获取类的实例,并且可以越过有效范围的限制,破坏了封装性。可以通过反射获取类的所有方法及属性,还可以回去注解的所有属性。
  2.   获取反射的主要方法就是:1.类.class。2. 类实例.getclass方法。3.class.getName方法4.保证类.TYPE属性5.classLoader.loadClass方法。

12.spring有哪些常用的注解?

  spring主要的思想就是ioc和aop, ioc中的注解主要就是@Bean,@AutoWried,@Qualify,@Component。aop的主要注解就是@Aspect。@Before,@After,@Around等通知方式。

13.RestController和Controller的区别?

  RestContrller的底层实现就是通过@Controller和@ReponseBody。

*14.Spring的核心配置文件是什么?

  主要的配置文件就是applicationContext.xml,主要就是用来配置数据库连接,ampper的映射,spring容器的配置等等。

15.ORM框架有了解过吗?

  我主要使用的ORM框架就是mybatis,JPA之前做项目的时候也有使用过。主要激素通过mapper.xml文件编写SQL语句来访问数据库,目前我的项目中主要使用的就是mybatis-plus编写Dao层。

16.你刚刚说到Mybatis,那你对mybatis的执行流程有了解过吗?

  1.   读取mybatis-config.xml的配置文件。
  2.   创建sqlSession工厂,也就是创建会话工厂。
  3.   通过工厂创建sqlSession,sqlSession中包含访问数据库的读写方法。
  4.   在SqlSession中Excutor负责执行操作数据库的接口。
  5.   在Excutor中有个属性叫做MapperStatement负责将从数据库到java的类型转化及从java到数据库的类型转换。最终操作数据库。

*17.Mysql有哪些引擎?

主要的就是三个存储引擎,Myisam,Innodb,Memory。

  1.   Myisam只支持表级锁,索引的的底层采用B+树结构,不支持事务。存储结构以.idb结尾的文件存储数据,索引,表结构
  2.   Innodb目前mysql默认的存储引擎,索引的底层结构使用B+树结构,支持表级锁和行级锁,支持事务的处理,存储的结构以.sdi存储表结构,.myi存储索引,.myd存储数据
  3.   Memory存储引擎底层就是使用当前内存来进行存储,存储的结构以.sdi存储表的结构

18.索引的作用是什么?

  我们可以把索引理解成目录,通过目录我们就可以快速的定位数据的位置,索引也是如此。主要的作用就是加快我们的查询速度。

19.索引有哪些类型?

  唯一索引:在表中只能唯一存在。主键索引:也就是主键最带的索引。全文索引。

  我比较了解的索引就是聚簇索引和非聚簇索引。二者索引都是使用B+树为底层结构的。区别就是聚簇索引在叶子节点上存储的数据是一整条的数据,而非聚簇索引在叶子节点上主要存储的主键id,以此如果使用到非聚簇索引进行查询的时候,会使用主键id到聚簇索引中查询出现回表的操作

20.为了加快sql的查询速度,索引添加到哪比较合适?

  1.   我们需要保证字段数据的唯一性,不建议对名字,岁数这种字段添加索引,一般推荐对id这种唯一的字段添加索引。当要对长字符串数据或Text数据添加索引的时候可以使用全文索引。
  2.   也并不是说添加越多索引查询就越快,在进行写操作的时候我们也需要花费时间成本来维护索引。
  3.   在添加索引的时候我们需要避免索引失效的问题,实现覆盖索引的效果,避免回表的发生。
  4.   在进行对大数据的分页查询的时候我们可以使用 子查询+覆盖索引来优化速度。(先通过范围查询除id主键的集合,通过id集合作为子查询条件查询对应的所有数据)

21.git有哪些常用的指令?

  最常用的就是克隆:git clone ,拉取最新的代码:git pull,将当前的代码添加到缓存中:git add *

将代码进行提交:git commit "注释", 将代码进行推送:git push。

22.git分支管理,如何将别人的远程推送的代码合并到自己的上面?

  主要就是通过git pull将远程的代码同步到本地,用户进行手动处理冲突的位置。

23.项目中登录流程校验是怎么实现的呢?

  我做的项目中,主要有两种实现方式:通过gateway的全局拦截器进行校验和双token三认证的实现方式。那个我给您介绍一下两种方案的实现流程,您看行吗?

  在实习项目中,主要就是基于springSecurity+jwt实现的,请求进入gateway的全局拦截器中,拦截器会去解析token,在解析成功后将userid存放到请求头中,将请求路由到对应的微服务模块中,这里有一个细节就是,我们会在每个微服务中编写一个公共的全局拦截器会将请求头中的userId存储到threadLocal共远程调用的时候使用。(jwt主要就是三个部分 头部,参数体,签名,签名通过头部 + 参数体使用Base64生成对应的签名)

  在我的物流微服务项目中就是基于双token三认证实现的校验 ,token分为长token和短token,短token用来进行进行校验长token用来生成新的短token和长token,且会将其存储到redis中,长token只能使用一次。三校验分别是:校验短token是否有效为第一校验,如果无效就校验长token是否有效这就是第二次校验,有效的话就会去redis中判断长token是否被使用过这个是第三次校验。最终生成新的长短token。(token的生成主要就是通过自定义的私钥生成的)

public static String createToken(String subject)
{
    return Jwts.builder()
            .setSubject(subject)
            .signWith(SignatureAlgorithm.HS256, secret)
            .compact();
}

*23.token是由哪个包实现的呢?

  我项目中的token主要都是使用jwt生成的,就是jwt包,使用的步骤就是建立一个根据类自定义个生成token的方法,通过对应的参数,加密算法,密钥就可以生成对应的token,在token进行解析的时候提供密钥和token就可以获得对应的参数。

//token生成方法
String tokrn = Jwts.builder()
            .setSubject(subject)
            .signWith(SignatureAlgorithm.HS256, secret)
            .compact();

//token解析方法
Object body = Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++实战——日期类的实现

日期类的实现 前言一、日期类概念实现运用场景 二、日期类的具体实现代码构造函数拷贝构造函数获取日期(内联函数)赋值加等减等加减小于小于等于大于大于等于相等不相等前置后置前置- -后置- -关于类里重载的比较运算符为什么要加外部const示例 Date.hDa…

常见UI组件(二)

一、文本输入 1.1 概述 TextInput为文本输入组件,用于接收用户输入的文本内容 1.2 参数 Entry Component struct Index {build() {Column({space : 50}) {TextInput({placeholder:请输入用户名}).width(70%)TextInput({text:当前内容}).width(70%)}.width(100%).…

90天精通Psim仿真--经典实战教程--第10天 Simcode DSP28335 LED控制

PSIM (Power Simulation) 是一款电力电子和电机控制仿真软件,而DSP28335是德州仪器(TI)的一款数字信号处理器(DSP)。如果你想要在PSIM的SimCoder环境中为DSP28335生成LED闪烁的代码,遵循以下步骤: 打开PSIM并创建模型: 首先,在PSIM中创建一个电路模型,该模型应包括DS…

Bootstrap 5 保姆级教程(十一):模态框 提示框

一、模态框 1.1 创建模态框 以下实例创建了一个简单的模态框效果 &#xff1a; <div class"container mt-3"><h3>模态框实例</h3><p>点击按钮打开模态框</p><button type"button" class"btn btn-primary" d…

Scikit-Learn 支持向量机分类

Scikit-Learn 支持向量机分类 1、支持向量机&#xff08;SVM&#xff09;1.1、SVM概述1.2、SVM原理1.3、SVM的损失函数 1、支持向量机&#xff08;SVM&#xff09; 1.1、SVM概述 在机器学习中&#xff0c;支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#x…

C++入门5.内联函数,auto关键字,基于范围的for循环(C++11),指针空值nullptr(C++11)

本篇是C过度C初始的最后一篇&#xff0c;快快对入门须知的知识有个印象后&#xff0c;就可以顺顺利利的学习C的类了。 目录 内联函数&#xff1a; 内联函数的特性&#xff1a; auto关键字(C11)&#xff1a; auto简介&#xff1a; 使用细则&#xff1a; auto不能推导的场…

【Linux】帮助类命令

在Linux中&#xff0c;man用于查看系统手册页&#xff08;manual pages&#xff09;。它用于查阅关于特定命令、函数、工具或文件格式的详细信息。要使用man命令&#xff0c;只需在终端中输入man&#xff0c;后跟您要查看的命令或主题的名称。 例如&#xff0c;如果查看ls命令…

【Linux C | 多线程编程】线程同步 | 信号量(无名信号量) 及其使用例子

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

018Node.js安装淘宝镜像(cnpm命令)

http://www.npmjs.org npm包官网 https://npm.taobao.org 淘宝npm镜像官网 淘宝NPM镜像是一个完整npmjs.org镜像&#xff0c;你可以用此替代官方版本&#xff08;只读&#xff09;&#xff0c;同步频率目前为10分钟一次&#xff0c;保证尽量与官方服务同步。 可以定制的cnpm(…

若依前后端部署到一起

引用&#xff1a;https://blog.csdn.net/qq_42341853/article/details/129127553 前端改造&#xff1a; 配置打包前缀 修改router.js 编程hash模式&#xff1a; 前端打包&#xff1a;npm run build:prod 后端修改&#xff1a; 添加thymeleaf包&#xff0c;和配置文件 spri…

Three.js加载glb / gltf模型,Vue加载glb / gltf模型(如何在vue中使用three.js,vue使用threejs加载glb模型)

简介&#xff1a;Three.js 是一个用于在 Web 上创建和显示 3D 图形的 JavaScript 库。它提供了丰富的功能和灵活的 API&#xff0c;使开发者可以轻松地在网页中创建各种 3D 场景、模型和动画效果。可以用来展示产品模型、建立交互式场景、游戏开发、数据可视化、教育和培训等等…

Jenkins用maven风格build报错解决过程记录

1、Jenkins2.453新建项目&#xff0c;构建风格选的maven 2、自由风格构建部署没有任何问题&#xff0c;但是maven风格build一直失败&#xff0c;报错如下图 3、解决方案&#xff1a;在系统管理–系统配置–Maven项目配置&#xff0c;删除全局MAVEN_OPT的路径信息&#xff0c;…

OpenCV基本图像处理操作(四)——傅立叶变换

傅里叶变换的作用 高频&#xff1a;变化剧烈的灰度分量&#xff0c;例如边界 低频&#xff1a;变化缓慢的灰度分量&#xff0c;例如一片大海 滤波 低通滤波器&#xff1a;只保留低频&#xff0c;会使得图像模糊 高通滤波器&#xff1a;只保留高频&#xff0c;会使得图像细节…

事务的传播行为介绍和事务失效

常用的就下图介绍的这两种&#xff0c;REQUIRED 支持当前事务&#xff0c;如果不存在&#xff0c;就新建一个&#xff0c;EQUIRES_NEW 如果有事务存在&#xff0c;挂起当前事务&#xff0c;创建一个新的事务 同一个service中必须用代理对象调用&#xff0c;否则失效

ubuntu22.04下编译ffmpeg和ffplay

Ubuntu22.04 下编译安装 ffmpeg 和 ffplay 一、下载源码包 1.1 官方下载链接&#xff1a;Download FFmpeg 可以手动下载&#xff0c;也可以命令行下载&#xff1a; wget http://www.ffmpeg.org/releases/ffmpeg-7.0.tar.xz 1.2 下载完解压 tar -xvf ffmpeg-7.0.tar.xz…

3.SpringCloud版本

1.SpringCloud与SpringBoot之间版本对应 2.服务拆分的注意事项 1.不同微服务&#xff0c;不要重复开发相同业务。 2.微服务的数据独立&#xff0c;每个微服务都有自己独立的数据库&#xff0c;不要访问其他微服务的数据库。 3.微服务可以将自己的的业务暴露为接口&#xff…

如何选择适用于Mac的iPhone数据恢复软件?

以下是全球无数 Mac 用户每天遇到的场景&#xff1a; 用户丢失了重要文件。用户在搜索中输入术语“iPhone数据恢复软件”。出现了数百个可能合适的软件应用程序&#xff0c;使用户很难决定其中哪一个是最好的。 这并不好&#xff0c;因为iOS数据恢复是一个时间敏感的过程&…

Spring、SpringMVC、SpringBoot核心知识点(持续更新中)

Spring、SpringMVC、SpringBoot核心知识点&#xff08;持续更新中&#xff09; Spring Bean 的生命周期Spring 的 IOC 与 AOPSpring Bean 循环依赖Spring MVC 处理请求的过程Spring Boot 自动装配原理Spring Boot 启动流程 Spring Bean 的生命周期 参考文章&#xff1a;一文读…

提取点云-------PCL

提取点云 /// <summary> /// VoxelGrid滤波下采样 /// </summary> /// <param name"cloud">需要滤波的点云</param> /// <param name"lx">三维体素栅格的x</param> /// <param name"ly">三维体素栅格…

vue 下载文件 处理后台返回的文件流

1. 下载文件很常见&#xff0c;下载成各种格式的也很常见&#xff0c;本质就是后台返回一个文件流&#xff0c;我们前端去处理一下就行&#xff0c;但是如果因为某些条件&#xff0c;没有返回文件流&#xff0c;返回告诉你&#xff0c;文件出现错误了&#xff0c;那我们就需要把…