2022年一到二年经验全栈工程师面试总结

你觉得之前工作遇到最大的问题是什么?怎么解决的?

你觉得项目的最容易出错的一个点是什么?

https://www.zhihu.com/question/270351456?sort=created

Java中的异常处理

http://www.codeforest.cn/article/3100
https://blog.csdn.net/versus666/article/details/118296482

JAVA注册时的验证码怎么设计的?

https://blog.csdn.net/niceLiuSir/article/details/78473803
https://blog.csdn.net/m0_61120771/article/details/123698596
https://www.csdn.net/tags/MtTaYg0sNjgwNjQtYmxvZwO0O0OO0O0O.html

用游戏解释Java多线程

https://baijiahao.baidu.com/s?id=1721474307144632001&wfr=spider&for=pc
java多线程系列:通过对战游戏学习CyclicBarrier
http://ifeve.com/java-cyclicbarrier/

用户登录密码怎么设计的?

JAVA用户登录密码加密加盐
https://blog.csdn.net/weixin_59334478/article/details/124913147
https://blog.csdn.net/qq873113580/article/details/123699709

简单递归,第一个人10岁,第2个比第1个人大2岁,依次递推,请用递归方式计算出第8个人

https://blog.csdn.net/dabing69221/article/details/11749465/

值类型和引用类型有什么区别?

https://blog.csdn.net/qq_59943770/article/details/120802499
继承即扩展,延续

继承的概念,继承的好处?

1:使用继承的好处:

(1)减少代码的冗余,提高代码的运行

(2)便于子功能的拓展

(3)为多态性提供了使用前提

2:语法:A类 extends B类

A类:子类,派生类,subclss

B类:父类,超类,基类,superclass

一旦A类继承了B类,子类A中就获取了父类B中的所有属性和方法。

3:特点:

3.1:父类中声明的private的属性和方法子类中不能直接获取,但是仍然可以获取到父类中已经私有的属性和方法。

3.2:直接继承的是直接父类,间接继承的是间接父类。

3.3:子类继承父类后,仍然可以声明自己特有的属性或方法,子类和父类不同于子集和集合的关系,实现功能的扩展。

3.4:一个类可以被多个子类继承,一个类只能有一个直接父类。

3.5:所有Java类都直接或间接的继承于Java.long.Object类,所有类都拥有Object类的功能。

SpringBoot与SpringCloud的关系与区别

一、SpringBoot和SpringCloud简介
1、SpringBoot:是一个快速开发框架,通过用MAVEN依赖的继承方式,帮助我们快速整合第三方常用框架,完全采用注解化(使用注解方式启动SpringMVC),简化XML配置,内置HTTP服务器(Tomcat,Jetty),最终以Java应用程序进行执行。

2、SpringCloud: 是一套目前完整的微服务框架,它是是一系列框架的有序集合。它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过SpringBoot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用SpringBoot的开发风格做到一键启动和部署。

二、SpringBoot和SpringCloud的关系与区别
1、SpringBoot只是一个快速开发框架,使用注解简化了xml配置,内置了Servlet容器,以Java应用程序进行执行。
2、SpringCloud是一系列框架的集合,可以包含SpringBoot。

三、SpringBoot是微服务框架吗?
1、SpringBoot只是一个快速开发框架,算不上微服务框架。
2、SpringCloud+SpringBoot 实现微服务开发。具体的来说是,SpringCloud具备微服务开发的核心技术:RPC远程调用技术;SpringBoot的web组件默认集成了SpringMVC,可以实现HTTP+JSON的轻量级传输,编写微服务接口,所以SpringCloud依赖SpringBoot框架实现微服务开发。

四、SpringMVC在3.0开始支持采用注解方式启动,所以可以不再配置传统的XML配置文件。

springboot常用注解有哪些

1、@SpringBootApplication
包含@Configuration、@EnableAutoConfiguration、@ComponentScan
通常用在主类上。
2、@Repository
用于标注数据访问组件,即DAO组件。
3、@Service
用于标注业务层组件。
4、@RestController
用于标注控制层组件(如struts中的action),包含@Controller和@ResponseBody
5、@ResponseBody
表示该方法的返回结果直接写入HTTP response body中
一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析
为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。
6、@Component
泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
7、@ComponentScan
组件扫描。相当于context:component-scan,如果扫描到有@Component @Controller @Service等这些注解的类,则把
这些类注册为bean。
8、@Configuration
指出该类是 Bean 配置的信息源,相当于XML中的,一般加在主类上。
9、@Bean
相当于XML中的,放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理。
10、@EnableAutoConfiguration
让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置,一般加在主类上。
11、@AutoWired
byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。
当加上(required=false)时,就算找不到bean也不报错。
12、@Qualifier
当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用
13、@Resource(name=“name”,type=“type”)
没有括号内内容的话,默认byName。与@Autowired干类似的事。
14、@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
该注解有六个属性:
params:指定request中必须包含某些参数值是,才让该方法处理。
headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
value:指定请求的实际地址,指定的地址可以是URI Template 模式
method:指定请求的method类型, GET、POST、PUT、DELETE等
consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html;
produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
15、@RequestParam
用在方法的参数前面。
@RequestParam String a =request.getParameter(“a”)。
16、@PathVariable
路径变量。参数与大括号里的名字一样要相同。

RequestMapping("user/get/mac/{macAddress}")
public String getByMacAddress(@PathVariable String macAddress){
  //do something;
  }

17、@Profiles
Spring Profiles提供了一种隔离应用程序配置的方式,并让这些配置只能在特定的环境下生效。
任何@Component或@Configuration都能被@Profile标记,从而限制加载它的时机。

@Configuration
@Profile("prod")
public class ProductionConfiguration {    // ...}

18、@ConfigurationProperties
Spring Boot将尝试校验外部的配置,默认使用JSR-303(如果在classpath路径中)。
你可以轻松的为你的@ConfigurationProperties类添加JSR-303 javax.validation约束注解:

@Component
@ConfigurationProperties(prefix="connection")
public class ConnectionSettings {
@NotNullprivate InetAddress remoteAddress;
// ... getters and setters
}

全局异常处理
19、@ControllerAdvice
包含@Component。可以被扫描到。
统一处理异常
20、@ExceptionHandler(Exception.class):
用在方法上面表示遇到这个异常就执行以下方法

Spring/SpringBoot系列之Spring中涉及的9种设计模式

Spring中涉及的设计模式:简单工厂(非23种设计模式中的一种),工厂方法,单例模式,适配器模式,装饰器模式,代理模式,观察者模式,策略模式,模版方法模式
https://blog.csdn.net/fei1234456/article/details/106693892

springboot和springmvc,spring的区别

springboot:
框架顾名思义是为spring的开发提供了更快的入门体验,零配置因为很大程度适用了习惯优于配置,集成了大量的常用的第三方库的配置,为这些第三方库提供了开箱即用的能力,提供了一系列大型项目常用的非功能性特征,如嵌入式服务器,安全性,度量,运行状况检查,外部化配置等,spring将各种配置和库进行整合。
springboot框架的控制反转的核心特性,并通过依赖注入实现控制反转来实现管理,Spring框架具有控制反转(IOC)特性,(通俗的说就是一般如果没有在spring的时候,都是由n个对象来组成,然后彼此合作完成业务逻辑,但是一旦某个对象出错之后,就会影响整个系统的正常的运行,如果有了ioc的话,就对这些对象之间的依赖关系之间的解耦,然后把对象的初始化, 创建对象,对象的控制器都交给IOC容器来控制,这样就能更大的实现的降低编码的复杂度,也可以被重用和扩展),IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。Spring框架利用容器管理对象的生命周期,容器可以通过扫描XML文件或类上特定Java注解来配置对象,开发者可以通过依赖查找或依赖注入来获得对象。Spring框架具有面向切面编程(AOP)框架,SpringAOP框架基于代理模式,Spring框架下的事务管理、远程访问等功能均可以通过使用SpringAOP技术实现,它不仅对Java:JDBC、MyBATIs、Hibernate,等所有流行的数据访问框架中提供支持,同时还可以与Spring的事务管理一起使用,为数据访问提供了灵活性。

Spring特点:
1:可以创建独立的Spring应用程序
2:内嵌Tomcat或Servlet等容器
3:自动配置Spring容器
4:不需要xml的配置

springmvc:
Spring MVC ,是web层的mvc框架,是spring的子框架,也有spring的特性,springmvc分离了控制器、模型对象、过滤器以及处理程序对象的角色,这种分离让它们更容易进行定制。采用IOC便于测试,Spring MVC提供了一种轻度耦合的方式来开发web应用,它是Spring的一个模块,是一个web框架。
而Spring Boot实现了自动配置,降低了项目搭建的复杂度。
springboot和springmvc区别:springboot是配置工具,springmvc是框架。
提供了一种轻度耦合的方式来开发web应用。它是Spring的一个模块,是一个web框架。通过Dispatcher Servlet,开发web应用变得很容易。
Spring Boot实现了自动配置,降低了项目搭建的复杂度。它主要是为了解决使用Spring框架需要进行大量的配置太麻烦的问题,对使用者来说,换用Spring Boot以后,项目初始化方法变了,配置文件变了,另外就是不需要单独安装Tomcat这类容器服务器。
springmvc原理:↓
可以说是在客户端发送请求到dispatcherServlet,再由dispatcherServlet去查询多个mapping,再找到controller,再由dispatcherServlet把这个请求发送到controller,再由controller找到service,再由service根据请求来调用serviceimpl的实现类。

Spring:
Spring是一个开源容器框架,web层,业务层,dao层,持久层的组件,并且可以配置各种bean,和维护bean与bean之间的关系。其核心就是控制反转(IOC),和面向切面(AOP),简单的说就是一个分层的轻量级开源框架。
spring ,包括:Spring JDBC 、Spring MVC 、Spring Security、 Spring AOP 、Spring ORM 、Spring Test
springboot,spring,springmvc区别:其实就是基于spring基础上做了扩展!
https://blog.csdn.net/gheost/article/details/114223952

springCloud的组件

https://baijiahao.baidu.com/s?id=1686055618310435909&wfr=spider&for=pc

SpringCloud——Zookeeper

zookeeper是一个分布式协调工具,具有高性能的、开源的特征。它是Google的Chubby一个开源的时间,是Hadoop和Hbase的重要组件,它是一个为分布式应用程序一致性和分布式协调技术服务的软件。在springcloud中,它可以实现注册中心功能,zookeeper服务器取代Eureka服务器,zk作为服务注册中心
https://blog.csdn.net/qq_45838562/article/details/119411584

shiro实现登录安全认证

https://blog.csdn.net/StarskyBoy/article/details/81295455
https://blog.csdn.net/sage_wang/article/details/79592269

javaScript、jQuery、vue的区别

1.javaScript是运行在浏览器端的脚步语言,JavaScript主要解决的是前端与用户交互的问题,包括使用交互与数据交互,JavaScript是浏览器解释执行的。

2.jQuery就是javascript中的一个函数库,一个js文件,是把js中比较复杂的东西封装成一个库,能够让人们在开发过程中尽可能的少写多做。

3.Vue.js可以作为一个js库来使用,也可以用它全套的工具来构建系统界面,这些可以根据项目的需要灵活选择,所以说,Vue.js是一套构建用户界面的渐进式框架。Vue的核心库只关注视图层,Vue的目标是通过尽可能简单的 API 实现响应的数据绑定,在这一点上Vue.js类似于后台的模板语言。其本质上来说也是js代码

总结:
1.js,jQuery首先都要获取到DOM对象,然后对DOM对象进行进行值的修改等操作
2.Vue是首先把值和js对象进行绑定,然后修改js对象的值,Vue框架就会自动把DOM的值就行更新。
也可以简单的理解为Vue帮我们做了dom操作,我们以后用Vue就需要修改对象的值和做好元素和对象的绑定,Vue这个框架就会自动帮我们做好dom的相关操作

jQuery只是一个类库,提供了很多的方法,但不能算框架,而vue.js是一个框架,有一套完整的体系。所以Vue的优势比jQ大很多,工作中大多数也是采用Vue框架来编写的
https://blog.csdn.net/sinat_31907813/article/details/82863301

对MVVM的理解

MVVM 由 Model、View、ViewModel 三部分构成,Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑;View 代表UI 组件,它负责将数据模型转化成UI 展现出来;ViewModel 是一个同步View 和 Model的对象。

在MVVM架构下,View 和 Model 之间并没有直接的联系,而是通过ViewModel进行交互,Model 和 ViewModel 之间的交互是双向的, 因此View 数据的变化会同步到Model中,而Model 数据的变化也会立即反应到View 上。

ViewModel 通过双向数据绑定把 View 层和 Model 层连接了起来,而View 和 Model 之间的同步工作完全是自动的,无需人为干涉,因此开发者只需关注业务逻辑,不需要手动操作DOM, 不需要关注数据状态的同步问题,复杂的数据状态维护完全由 MVVM 来统一管理。

Vue数据双向绑定原理

实现mvvm的数据双向绑定,是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来给各个属性添加setter,getter并劫持监听,在数据变动时发布消息给订阅者,触发相应的监听回调。就必须要实现以下几点:
1、实现一个数据监听器Observer,能够对数据对象的所有属性进行监听,如有变动可拿到最新值并通知订阅者
2、实现一个指令解析器Compile,对每个元素节点的指令进行扫描和解析,根据指令模板替换数据,以及绑定相应的更新函数
3、实现一个Watcher,作为连接Observer和Compile的桥梁,能够订阅并收到每个属性变动的通知,执行指令绑定的相应回调函数,从而更新视图
在这里插入图片描述
关于Vue的面试https://blog.csdn.net/qq_44182284/article/details/111191455

Vue的监听

监听的本质其实就是调用了Object.defineProperty 这个方法,将数据变为响应式数据
通过读Vue源码可以知道,定义了一个方法 叫做defineReactive,接收三个参数,第一个参数:对象名,第二个参数,对象的键,第三个是对象的值。在其内部调用Object.defineProperty()方法,实现数据的响应式。

JQury中获取table中第一行第一列的数据

$(“#main_table tr”).find(“td:eq(0)”)

JQury中获取下拉框的第二个元素

遍历select下的option,使用val()获取每个option的值,然后加入到一个数组中。根据这个思路,可以使用for循环或者jQuery的each()遍历函数实现。这里提供一个更简洁的代码:
$(“option”).map(function(){return $(this).val();}).get().join(", ")
代码说明:
使用map()函数把每个option的值传递到当前匹配集合,生成包含返回值的对象;
使用 get() 处理返回的对象以得到基础的数组;
使用join()函数组装字符串。

ajax请求的五个步骤

https://blog.csdn.net/weixin_44161385/article/details/124025152

ElementUI路由定位一个静态的html

LayUI写一个插件

MyBatis中#{}与¥{}的区别

#{} 是预编译处理,${}是字符串替换。

Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
Mybatis在处理 时 , 就 是 把 {}时,就是把 {}替换成变量的值。
使用#{}可以有效的防止SQL注入,提高系统安全性。

Linux查看当前盘的剩余容量

使用df
使用命令“df -lh”,可以更详细地显示磁盘使用情况
如果使用命令“df -a ”,则是全部硬盘的使用与剩余情况
https://blog.csdn.net/weixin_38610651/article/details/104609162

mysql 分桶_mysql的分组和过滤桶where的组合运用

对GROUP BY子句后面跟随的列名进行分组,然后对每一个分组而不是整个表进行操作。
GROUP BY的规定:

1、GROUP BY 后面可以包含多个列,这就是嵌套。
2、如果GROUP BY进行了嵌套,数据将在最后一个分组上进行汇总。
3、GROUP BY子句中列出来的每个列必须是检索列或有效的表达式(但不能是聚集函数),如果在SELECT中使用了表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名。
4、除了聚集语句外,SELECT语句中的每一个列都必须在GROUP BY子句中给出。
5、如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多个NULL,它们将作为一个分组返回。
6、GROUP BY子句必须在WHERE 子句之后,ORDER BY 子句之前。

过滤分组结果
我们知道WHERE 子句用于过滤结果,但是对于分组的过滤WHERE子句不行。
因为WHERE子句,是针对行的过滤。要对分组结果进行过滤,必须使用HAVING子句,HAVING子句能针对分组的结果进行过滤。

https://blog.csdn.net/weixin_32199769/article/details/113209981

亿万级数据处理的高效解决方案

https://zhuanlan.zhihu.com/p/90848602

数据库密码配置项加密

https://blog.csdn.net/chen801090/article/details/105813870/

数据库事务是什么概念?

Mysql:https://m.php.cn/article/418031.html
Redis
Redis事务功能是通过MULTI、EXEC、DISCARD和WATCH 四个原语实现的
Redis会将一个事务中的所有命令序列化,然后按顺序执行。
1.redis 不支持回滚“Redis 在事务失败时不进行回滚,而是继续执行余下的命令”, 所以 Redis 的内部可
以保持简单且快速。
2.如果在一个事务中的命令出现错误,那么所有的命令都不会执行;
3.如果在一个事务中出现运行错误,那么正确的命令会被执行。
1)MULTI命令用于开启一个事务,它总是返回OK。 MULTI执行之后,客户端可以继续向服务器发送任
意多条命令,这些命令不会立即被执行,而是被放到一个队列中,当EXEC命令被调用时,所有队列中
的命令才会被执行。
2)EXEC:执行所有事务块内的命令。返回事务块内所有命令的返回值,按命令执行的先后顺序排列。
当操作被打断时,返回空值 nil 。
3)通过调用DISCARD,客户端可以清空事务队列,并放弃执行事务, 并且客户端会从事务状态中退
出。
4)WATCH 命令可以为 Redis 事务提供 check-and-set (CAS)行为。 可以监控一个或多个键,一旦其
中有一个键被修改(或删除),之后的事务就不会执行,监控一直持续到EXEC命令。

怎么保证接口的幂等性?

https://blog.csdn.net/yaxuan88521/article/details/122801729

扣减库存超卖少卖问题?

高并发库存扣减超卖问题解决,多种sql适合场景分析
https://blog.csdn.net/cat_hate_fish/article/details/118500160

浏览器中输入URL会发生什么?

https://www.csdn.net/tags/MtTaEgxsMDE1ODc0LWJsb2cO0O0O.html

Redis在电影网站中的应用

https://blog.csdn.net/weixin_45393094/article/details/109275903
Redis面试常见问题
https://zhuanlan.zhihu.com/p/423894153
https://blog.csdn.net/OAOII/article/details/123064390

Mybatis 和 Mybatis Plus 的区别

Mybatis-Plus是一个Mybatis的增强工具,只是在Mybatis的基础上做了增强却不做改变,MyBatis-Plus支持所有Mybatis原生的特性,所以引入Mybatis-Plus不会对现有的Mybatis构架产生任何影响。
https://blog.csdn.net/liuduke1/article/details/108246383

三次握手怎么保证连接的可靠性的?

TCP为了提供可靠传输:
(1)首先,采用三次握手来建立TCP连接,四次握手来释放TCP连接,从而保证建立的传输信道是可靠的。
(2)其次,TCP采用了连续ARQ协议(回退N,Go-back-N;超时自动重传)(自动重传请求(Automatic Repeat-reQuest,ARQ))来保证数据传输的正确性,使用滑动窗口协议来保证接方能够及时处理所接收到的数据,进行流量控制。
(3)最后,TCP使用慢开始、拥塞避免、快重传和快恢复来进行拥塞控制,避免网络拥塞。

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手: 建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手: 服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手: 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据.
原文链接:https://blog.csdn.net/m0_51945027/article/details/115923912

数据结构—如何判定链表是否有环

https://blog.csdn.net/qq_38619449/article/details/123834068

未完待续

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值