你以为的Java面试只是背答案?跳槽涨薪不还是得靠自己的技术

news2024/10/2 22:17:48

前言

Java面试当然不能只靠背答案,为了应付面试背完答案拿到offer只是进入了这个行业,后面的实操还是得看自己的技术!技术的挂钩当然和技术底层也是挂钩的。

这是我在工作、面试中学习并总结到的一些知识点,都是一些比较典型的、面试常常被问到的问题。如果你平时没有注意去总结的话,那么当你面试被问到的时候可能会是一脸懵圈,就算这个问题你知道怎么回事,但是你平时没有认真总结,你也可能会出现逻辑混乱的情况,从而错失工作机会。

有些知识点不经常使用就会忘记,但是面试还会问,对此,我也是深受其害,所以我决定将这些遇见的问题整理下来,分享出去,帮助更多的人,我们共同进步。所谓“温故而知新”,没事的时候多翻看一下这些知识,没准就会有新的收获,小编接下来会大家分享Java面试中都会遇到的12个专题,由于每个专题的题目比较多,小编这里精选挑选一些分享给到你们!

获取方式:私信我【面试总结】获取最新Java面试题资料合集

一、Java中间件专题

Zookeeper

Zookeeper 是一个分布式协调服务的开源框架。主要作用是为分布式系统提供协调服务,包括但不限于:分布式锁、统一命名服务、配置管理、负载均衡、主控服务器选举以及主从切换等。

Zookeeper 保证了如下分布式一致性特性:

(1)顺序一致性

(2)原子性

(3)单一视图

(4)可靠性

(5)实时性(最终一致性)

客户端的读请求可以被集群中的任意一台机器处理,如果读请求在节点上注册了监听器,这个监听器也 是由所连接的 zookeeper 机器来处理。对于写请求,这些请求会同时发给其他 zookeeper 机器并且达成一致后,请求才会返回成功。因此,随着 zookeeper 的集群机器增多,读请求的吞吐会提高但是写 请求的吞吐会下降。

Zookeeper提供了 (1)文件系统 (2)通知机制

Zookeeper Watcher 机制 -- 数据变更通知

​Zookeeper 的典型应用场景

Zookeeper 是一个典型的发布/订阅模式的分布式数据管理与协调框架,开发人员可以使用它来进行分布式数据的发布和订阅。

通过对 Zookeeper 中丰富的数据节点进行交叉使用,配合 Watcher 事件通知机制,可以非常方便的构建一系列分布式应用中年都会涉及的核心功能,如:

(1)数据发布/订阅

(2)负载均衡

(3)命名服务

(4)分布式协调/通知

(5)集群管理(6)Master 选举

(7)分布式锁

(8)分布式队列

RabbitMQ

MQ就是消息队列。是软件和软件进行通信的中间件产品

解耦:A 系统发送数据到 BCD 三个系统,通过接口调用发送。如果 E 系统也要这个数据呢?那如果 C 系统现在不需要了呢?

A 系统负责人几乎崩溃…A 系统跟其它各种乱七八糟的系统严重耦合,A 系统产生一条比较关键的数据,很多系统都需要 A 系统将这个数据发送过来。如果使用 MQ,A系统产生一条数据,发送到 MQ 里面去,哪个系统需要数据自己去 MQ 里面消费。

如果新系统需 要数据,直接从 MQ 里消费即可;如果某个系统不需要这条数据了,就取消对 MQ 消息的消费即可。这样下来,A 系统压根儿不需要去考虑要给谁发送数据,不需要维护这个代码,也不需要考虑 人家是否调用成功、失败超时等情况。就是一个系统或者一个模块,调用了多个系统或者模块,互相之间的调用很复杂,维护起来很麻烦。

但是其实这个调用是不需要直接同步调用接口的,如果用 MQ 给它异步化解耦。

异步:A 系统接收一个请求,需要在自己本地写库,还需要在 BCD 三个系统写库,自己本地写库 要 3ms,BCD 三个系统分别写库要 300ms、450ms、200ms。最终请求总延时是 3 + 300 + 450 + 200 = 953ms,接近 1s,用户感觉搞个什么东西,慢死了慢死了。用户通过浏览器发起请求。 如果使用 MQ,那么 A 系统连续发送 3 条消息到 MQ 队列中,假如耗时 5ms,A 系统从接受一个 请求到返回响应给用户,总时长是 3 + 5 = 8ms。

削峰:减少高峰时期对服务器压力

1、你们公司生产环境用的是什么消息中间件?

2、Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?

​3、MQ 有哪些常见问题?如何解决这些问题?

​4、RabbitMQ的工作模式

二、微服务全家桶专题

Spring Boot

1、Spring Framework 中有多少个模块,它们分别是什么?

​2、什么是 Spring IOC 容器?

​3、区分构造函数注入和 setter 注入

4、Spring IOC 的实现机制

Spring 中的 IOC 的实现原理就是工厂模式加反射机制

interface Fruit {
	public abstract void eat();
}
class Apple implements Fruit {
	public void eat(){
		System.out.println("Apple");
	}
}
class Orange implements Fruit {
	public void eat(){
		System.out.println("Orange");
	}
}
class Factory {
	public static Fruit getInstance(String ClassName) {
		Fruit f=null;
		try {
			f=(Fruit)Class.forName(ClassName).newInstance();
		}
		catch (Exception e) {
			e.printStackTrace();
		}
		return f;
	}
}
class Client {
	public static void main(String[] a) {
		Fruit f=Factory.getInstance("io.github.dunwu.spring.Apple");
		if(f!=null){
			f.eat();
		}
	}
}

3、什么是基于注解的容器配置

4、@Component, @Controller, @Repository,@Service 有何区别?

@Required 注解

这个注解表明bean的属性必须在配置的时候设置,通过一个bean定义的显式的属性值或通过自动装配,若@Required注解的bean属性未被设置,容器将抛出 BeanInitializationException。

public class Employee {
	private String name;
	@Required public void setName(String name){
		this.name=name;
	}
	public string getName(){
		return name;
	}
}

@Autowired 注解

@Autowired默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在(可以设置它required属性为false)。@Autowired 注解提供了更细粒度的控制,包括在何处以及如何完成自动装配。它的用法和@Required一样,修饰setter方法、构造器、属性或者具有任意名称和/或多个参数的PN方法。

public class Employee {
	private String name;
	@Autowired public void setName(String name) {
		this.name=name;
	}
	public string getName(){
		return name;
	}
}

@Autowired和@Resource之间的区别

@Qualififier 注解

当您创建多个相同类型的 bean 并希望仅使用属性装配其中一个 bean 时,您可以使用@Qualififier注解和 @Autowired 通过指定应该装配哪个确切的 bean 来消除歧义。

@RequestMapping 注解

获取方式:关注小编+转发文章+私信【面试总结】获取最新Java面试题资料合集

Spring MVC

Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把模型-视图-控制器分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合

1、Spring MVC的主要组件?

​2、请描述Spring MVC的工作流程?描述一下 DispatcherServlet 的工作流程?

(1)用户发送请求至前端控制器DispatcherServlet;

(2) DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;

(3)处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;

(4)DispatcherServlet 调用 HandlerAdapter处理器适配器;

(5)HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);

(6)Handler执行完成返回ModelAndView;

(7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;

(8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;

(9)ViewResolver解析后返回具体View;

(10)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)

(11)DispatcherServlet响应用户。

3、MVC是什么?MVC设计模式的好处有哪些

编辑切换为居中

添加图片注释,不超过 140 字(可选)

4、Spring MVC常用的注解有哪些?

  • @RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。

@RequestMapping注解的作用

编辑切换为居中

添加图片注释,不超过 140 字(可选)

  • @RequestBody:注解实现接收http请求的json数据,将json转换为java对象。

  • @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。

@ResponseBody注解的作用

编辑切换为居中

添加图片注释,不超过 140 字(可选)

  • @Conntroller:控制器的注解,表示是表现层,不能用用别的注解代替

@Controller注解的作用

编辑切换为居中

添加图片注释,不超过 140 字(可选)

Spring Cloud

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、智能路由、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。

Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

1、SpringCloud的优缺点

编辑切换为居中

添加图片注释,不超过 140 字(可选)

2、SpringCloud由什么组成

编辑切换为居中

添加图片注释,不超过 140 字(可选)

Eureka

1、服务注册和发现是什么意思?Spring Cloud 如何实现?

编辑切换为居中

添加图片注释,不超过 140 字(可选)

2、什么是Eureka

  • Eureka作为SpringCloud的服务注册功能服务器,他是服务注册中心,系统中的其他服务使用Eureka的客户端将其连接到Eureka Service中,并且保持心跳,这样工作人员可以通过EurekaService来监控各个微服务是否运行正常。

3、Eureka和ZooKeeper都可以提供服务注册与发现的功能,请说说两个的区别

编辑切换为居中

添加图片注释,不超过 140 字(可选)

Zuul

网关相当于一个网络服务架构的入口,所有网络请求必须通过网关转发到具体的服务

1、什么是Spring Cloud Zuul(服务网关)

编辑切换为居中

添加图片注释,不超过 140 字(可选)

2、网关与过滤器有什么区别

网关是对所有服务的请求进行分析过滤,过滤器是对单个服务而言。

3、既然Nginx可以实现网关?为什么还需要使用Zuul框架

Zuul 是 SpringCloud 集成的网关,使用 Java 语言编写,可以对 SpringCloud 架构提供更灵活的服务。

Ribbon

编辑切换为居中

添加图片注释,不超过 140 字(可选)

1、Ribbon底层实现原理

Ribbon 使用 discoveryClient 从注册中心读取目标服务信息,对同一接口请求进行计数,使用 % 取余算法获取目标服务集群索引,返回获取到的目标服务信息。

2、Nginx与Ribbon的区别

Hystrix

1、在微服务中,如何保护服务?

2、谈谈服务降级、熔断、服务隔离

3、服务降级底层是如何实现的?

  • Hystrix实现服务降级的功能是通过重写HystrixCommand中的getFallback()方法,当Hystrix的run方法或construct执行发生错误时转而执行getFallback()方法。

Feign

  • Feign 是一个声明web服务客户端,这使得编写web服务客户端更容易

  • 他将我们需要调用的服务方法定义成抽象方法保存在本地就可以了,不需要自己构建Http请求了,直接调用接口就行了,不过要注意,调用方法要和本地抽象方法的签名完全一致。

1、Ribbon和Feign调用服务的区别

编辑切换为居中

添加图片注释,不超过 140 字(可选)

2、SpringCloud有Feign、RestTemplate两种调用接口方式!

Bus

1、什么是 Spring Cloud Bus?

编辑切换为居中

添加图片注释,不超过 140 字(可选)

Config

1、什么是Spring Cloud Config?

编辑切换为居中

添加图片注释,不超过 140 字(可选)

2、分布式配置中心的作用?

动态变更项目配置信息而不必重新部署项目。

Gateway

1、什么是Spring Cloud Gateway?

编辑切换为居中

添加图片注释,不超过 140 字(可选)

SpringCloud主要项目

  • Spring Cloud Netflix(重点,这些组件用的最多)

  • Spring Cloud Config

  • Spring Cloud Consul

  • Spring Cloud Bus

  • Spring Cloud Security

  • Spring Cloud Sleuth

  • Spring Cloud Task

  • Spring Cloud Stream

  • Spring Cloud Zookeeper

  • Spring Cloud OpenFeign

  • Spring Cloud Gateway

三、Java并发编程专题

1、为什么要使用并发编程

编辑切换为居中

添加图片注释,不超过 140 字(可选)

2、并发编程三个必要因素是什么?

3、线程和进程区别

4、什么是线程死锁

5、创建线程的四种方式

  • 继承 Thread 类;

public class MyThread extends Thread { @Override public void run() { System.out.println(Thread.currentThread().getName() + " run()方法正在执 行..."); }
  • 实现 Runnable 接口;

public class MyRunnable implements Runnable { @Override public void run() { System.out.println(Thread.currentThread().getName() + " run()方法执行 中..."); }
  • 实现 Callable 接口;

public class MyCallable implements Callable<Integer> { @Override public Integer call() { System.out.println(Thread.currentThread().getName() + " call()方法执行 中..."); return 1; }
  • 使用匿名内部类方式

public class CreateRunnable { public static void main(String[] args) { //创建多线程创建开始 Thread thread = new Thread(new Runnable() { public void run() { for (int i = 0; i < 10; i++) { System.out.println("i:" + i); } } } ); thread.start(); } }

6、线程的状态

7、Java 中你怎样唤醒一个阻塞的线程?

8、线程类的构造方法、静态块是被哪个线程调用的

9、 Java 中怎么获取一份线程 dump 文件?你如何在 Java 中获取线程堆栈?

10、什么是线程同步和线程互斥,有哪几种实现方式?

11、 多线程的常用方法

12、Java 线程数过多会造成什么异常?

13、同步方法和同步块,哪个是更好的选择?

14、如果你提交任务时,线程池队列已满,这时会发生什么

15、 一个线程运行时发生异常会怎样?

16、 你对线程优先级的理解是什么?

17、 为什么 wait(), notify()和 notifyAll()必须在同步方法或者同步块中被调用?

18、线程的 sleep()方法和 yield()方法有什么区别?

19、 在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?

20、为什么 Thread 类的 sleep()和 yield ()方法是静态的?

21、什么是阻塞式方法?

22、如何停止一个正在运行的线程?

23、什么叫线程安全?servlet 是线程安全吗?

24、Thread 类中的 yield 方法有什么作用?

25、如何在两个线程间共享数据?

26、在 Java 程序中怎么保证多线程的运行安全?

27、Java 如何实现多线程之间的通讯和协作?

28、Java 中 interrupted 和 isInterrupted 方法的区别?

29、 notify() 和 notifyAll() 有什么区别?

获取方式:私信我并发送【面试总结】即可获取最新Java面试题资料合集

四、Java基础专题

1、什么是Java

2、Jdk和Jre和JVM的区别

3、什么是字节码?采用字节码的最大好处是什么

4、Oracle JDK 和 OpenJDK 的对比

5、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗

6、访问修饰符 public,private,protected,以及不写(默认)时的区别

​7、final finally finalize区别

​8、super关键字的用法

class Person{ protected String name; public Person(String name) { this.name = name; } } class Student extends Person{ private String name; public Student(String name, String name1) { super(name); this.name = name1; } public void getInfo(){ System.out.println(this.name); //Child System.out.println(super.name); //Father } } public class Test { public static void main(String[] args) { Student s1 = new Student("Father","Child"); s1.getInfo(); } }

9、面向对象和面向过程的区别

10、面向对象的特征有哪些方面

五、Redis专题

Redis 是一个使用 C 语言写成的,开源的高性能 key-value 非关系缓存数据库。它支持存储的 value 类型相对更多,包括string( 字符串 ) 、 list( 链表 ) 、 set( 集合 ) 、 zset(sorted set -- 有序集合 ) 和 hash(哈希类型)。 Redis 的数据都基于缓存的,所以很快,每秒可以处理超过 10 万次读写操作,是已知性能最快的Key-Value DB 。 Redis 也可以实现数据写入磁盘中,保证了数据的安全不丢 失,而且Redis 的操作是原子性的。

Redis 主要有 5 种数据类型,包括 String , List , Set , Zset , Hash ,满足大部分的使用要求

​1、Redis 的持久化机制是什么?各自的优缺点?

2、Redis 的回收策略(淘汰策略)?

​3、Redis 如何设置密码及验证密码?

设置密码: confifig set requirepass 123456 授权密码: auth 123456

4、怎么理解 Redis 事务?

答:

1) 事务是一个单独的隔离操作: 事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中, 不会被其他客户端发送来的命令请求所打断。

2) 事务是一个原子操作: 事务中的命令要么全部被执行, 要么全部都不执行。

5、MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中的数据都是热点数据?

6、Redis 最适合的场景?

7、使用过 Redis 做异步队列么,你是怎么用的?

8、如何实现集群中的 session 共享存储?

六、MySQL优化专题

随着系统用户量的不断增加,MySQL 索引的重要性不言而喻,对于后端工程师,只有在了解索引及其优化的规则,并应用于实际工作中后,才能不断的提升系统性能,开发出高性能、高并发和高可用的系统。 今天小编首先会跟大家分享一下MySQL 索引中的各种概念,然后介绍优化索引的若干条规则,最后利用这些规则,针对面试中常考的知识点,做详细的实例分析。

1、MySQL 中有哪几种锁?

  • 表级锁: 开销小, 加锁快; 不会出现死锁; 锁定粒度大, 发生锁冲突的概率最高, 并发度最低。

  • 行级锁: 开销大, 加锁慢; 会出现死锁; 锁定粒度最小, 发生锁冲突的概率最低, 并发度也最高。

  • 页面锁: 开销和加锁时间界于表锁和行锁之间; 会出现死锁; 锁定粒度界于表锁和行锁之间, 并发度一般。

2、简述在MySQL 数据库中 MyISAM 和InnoDB 的区别

3、MySQL_fetch_array 和MySQL_fetch_object 的区别是什么?

4、什么是通用 SQL 函数?

5、MySQL 里记录货币用什么字段类型好

6、MySQL 数据库作发布系统的存储,一天五万条以上的增量, 预计运维三年,怎么优化?

​7、简单描述 MySQL 中,索引,主键,唯一索引,联合索引

8、SQL 注入漏洞产生的原因?如何防止?

​9、对于关系型数据库而言,索引是相当重要的概念,请回答

​10、什么样的对象可以使用 CREATE 语句创建?

七、Linux技术专题

Linux知识的掌握程度,在很多面试官眼里是候选人技术深度的一个重要评判标准。在这里我们将详细的整理常见的Linux面试题目, 提供给大家学习参考。

1、Unix和Linux有什么区别?

2、Linux 的体系结构

从大的方面讲,Linux 体系结构可以分为两块:

3、什么是CLI?

​4、简单 Linux 文件系统?

5、Linux 的目录结构是怎样的?

6、什么是硬链接和软链接?

​7、一台 Linux 系统初始化环境后需要做一些什么安全工作?

8、如何选择 Linux 操作系统版本?

9、请问当用户反馈网站访问慢,你会如何处理?

10、Linux 性能调优都有哪几种方法?

1、Disabling daemons (关闭 daemons)。

2、Shutting down the GUI (关闭 GUI)。

3、Changing kernel parameters (改变内核参数)。

4、Kernel parameters (内核参数)。

5、Tuning the processor subsystem (处理器子系统调优)。

6、Tuning the memory subsystem (内存子系统调优)。

7、Tuning the fifile system (文件系统子系统调优)。

8、Tuning the network subsystem(网络子系统调优)。

八、Mybatis专题

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

1、Mybatis优缺点

2、请说说MyBatis的工作原理

在学习 MyBatis 程序之前,需要了解一下 MyBatis 工作原理,以便于理解程序。 MyBatis 的工作原理如下图:

3、在mapper中如何传递多个参数

方法1:顺序传参法

public User selectUser(String name, int deptId);
<select id="selectUser" resultMap="UserResultMap"> 
  select * from user 
  where user_name = #{0} and dept_id = #{1} 
    </select>

#{}里面的数字代表传入参数的顺序。
这种方法不建议使用,sql层表达不直观,且一旦顺序调整容易出错。

方法2:@Param注解传参法

public User selectUser(@Param("userName") String name, int @Param("deptId")
deptId);

<select id="selectUser" resultMap="UserResultMap">
			select * from user
			where user_name = #{userName} and dept_id = #{deptId}
</select>

#{}里面的名称对应的是注解@Param括号里面修饰的名称。
这种方法在参数不多的情况还是比较直观的,(推荐使用)。

方法3:Map传参法

public User selectUser(Map<String, Object> params);

<select id="selectUser" parameterType="java.util.Map" resultMap="UserResultMap">

select * from user

where user_name = #{userName} and dept_id = #{deptId}

</select>

#{}里面的名称对应的是Map里面的key名称。
这种方法适合传递多个参数,且参数易变能灵活传递的情况。(推荐使用)。

方法4:Java Bean传参法

public User selectUser(User user);

<select id="selectUser" parameterType="com.jourwon.pojo.User"

resultMap="UserResultMap">

select * from user

where user_name = #{userName} and dept_id = #{deptId}

</select>

#{}里面的名称对应的是User类里面的成员属性。
这种方法直观,需要建一个实体类,扩展不容易,需要加属性,但代码可读性强,业务逻辑处理方
便,推荐使用。(推荐使用)。

4、MyBatis编程步骤是什么样的?

  • 1、 创建SqlSessionFactory

  • 2、 通过SqlSessionFactory创建SqlSession

  • 3、 通过sqlsession执行数据库操作

  • 4、 调用session.commit()提交事务

  • 5、 调用session.close()关闭会话

5、为什么需要预编译

九、多线程专题

随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,4 核、8 核甚至 16 核的也都不少见,如果是单线程的程序,那么在双核 CPU 上 就浪费了 50%, 在 4 核 CPU 上就浪费了 75%。单核 CPU 上所谓的"多线程"那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快, 看着像多个线程"同时"运行罢了。多核 CPU 上的多线程才是真正的多线程,它能让你的多段逻辑同时工作,多线程,可以真正发挥出多核CPU 的优势来,达到充分利用CPU 的目的。

1、线程和进程的区别是什么?

2、为什么要使用线程池?

编辑切换为居中

添加图片注释,不超过 140 字(可选)

3、什么是活锁、饥饿、无锁、死锁?

编辑切换为居中

添加图片注释,不超过 140 字(可选)

4、什么是原子性、可见性、有序性?

编辑切换为居中

添加图片注释,不超过 140 字(可选)

5、什么是 CAS 算法?在多线程中有哪些应用。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

十、性能调优专题

Tomcat

在工作中,作为 Java 开发的程序员,Tomcat 服务器是大家常用的,也是很多公司现在正在用的。但是,在系统并发量比较大的情况下,Tomcat 就会出现卡死和自动关闭等问题。如何优化 Tomcat,让它更高效的运行就成了问题,在本次面试题分享中,我将为你解答如何更好的提升 Tomcat 性能。

1、tomcat 有哪几种Connector 运行模式(优化)?

编辑切换为居中

添加图片注释,不超过 140 字(可选)

编辑切换为居中

添加图片注释,不超过 140 字(可选)

2、tomcat容器是如何创建servlet类实例?用到了什么原理?

当容器启动时,会读取在webapps目录下所有的web应用中的web.xml文件,然后对xml文件进行解析,并读取servlet注册信息。然后,将每个应用中注册的servlet类都进行加载,并通过反射的方式实例化。(有时候也是在第一次请求时实例化)在servlet注册时加上如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。

3、垃圾回收策略调优

编辑切换为居中

添加图片注释,不超过 140 字(可选)

4、打印类的加载情况及对象的回收情况

5、Tomcat一个请求的完整过程

Ng:(nginx)
upstream yy_001{
server 10.99.99.99:8080;
server 10.99.99.100:8080;
hash $**;
healthcheck_enabled;
healthcheck_delay 3000;
healthcheck_timeout 1000;
healthcheck_failcount 2;
healthcheck_send 'GET /healthcheck.html HTTP/1.0' 'Host: wo.com'
'Connection: close';
}
server {
include base.conf;
server_name wo.de.tian;
...
location /yy/ {
proxy_pass http://yy_001;
}

Nginx

在所有互联网公司中,Nginx 作为最常用的 7 层负载均衡代理层,每个后端开发人员和运维人员都应该对其有较为深入的理解。

​1、BIO和NIO、AIO的区别

​2、IO流的分类

3、非阻塞NIO(noblocking I/O)

​4、异步AIO(asynchronous I/O)

​5、什么是比特(Bit),什么是字节(Byte),什么是字符(Char),它们长度是多少,各有什么区别

十一、Java异常专题

Java异常是Java提供的一种识别及响应错误的一致性机制。 Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。在有效使用异常的情况下,异常能清晰的回答what, where, why这3个问题:异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪”抛出,异常信息回答了“为什么”会抛出。

​1. Throwable

Throwable 是 Java 语言中所有错误与异常的超类。

Throwable 包含两个子类:Error(错误)和 Exception(异常),它们通常用于指示发生了异常情况。

Throwable 包含了其线程创建时线程执行堆栈的快照,它提供了 printStackTrace() 等接口用于获取堆栈跟踪数据等信息。

2. Error(错误)

定义:Error 类及其子类。程序中无法处理的错误,表示运行应用程序中出现了严重的错误。

特点:此类错误一般表示代码运行时 JVM 出现问题。通常有 Virtual MachineError(虚拟机运行错误)、NoClassDefFoundError(类定义错误)等。比如 OutOfMemoryError:内存不足错误;StackOverflflowError:栈溢出错误。此类错误发生时,JVM 将终止线程。这些错误是不受检异常,非代码性错误。因此,当此类错误发生时,应用程序不应该去处理此类错误。按照Java惯例,我们是不应该实现任何新的Error子类的!

3. Exception(异常)

程序本身可以捕获并且可以处理的异常。Exception 这种异常又分为两类:运行时异常和编译时异常。

运行时异常

定义:RuntimeException 类及其子类,表示 JVM 在运行期间可能出现的异常。

特点:Java 编译器不会检查它。也就是说,当程序中可能出现这类异常时,倘若既"没有通过throws声明抛出它",也"没有用try-catch语句捕获它",还是会编译通过。比如NullPointerException空指针异常、 ArrayIndexOutBoundException数组下标越界异常、ClassCastException类型转换异常、ArithmeticExecption算术异常。此类异常属于不受检异常,一般是由程序逻辑错误引起的,在程序中可以选择捕获处理,也可以不处理。虽然 Java 编译器不会检查运行时异常,但是我们也可以通过 throws 进行声明抛出,也可以通过 try-catch 对它进行捕获处理。如果产生运行时异常,则需要通过修改代码来进行避免。例如,若会发生除数为零的情况,则需要通过代码避免该情况的发生!

RuntimeException 异常会由 Java 虚拟机自动抛出并自动捕获(就算我们没写异常捕获语句运行时也会抛出错误!!),此类异常的出现绝大数情况是代码本身有问题应该从逻辑上去解决并改进代码。

编译时异常

定义: Exception 中除 RuntimeException 及其子类之外的异常。

特点: Java 编译器会检查它。如果程序中出现此类异常,比如 ClassNotFoundException(没有找到指定的类异常),IOException(IO流异常),要么通过throws进行声明抛出,要么通过trycatch进行捕获处理,否则不能通过编译。在程序中,通常不会自定义该类异常,而是直接使用系 统提供的异常类。该异常我们必须手动在代码里添加捕获语句来处理该异常。

4. 受检异常与非受检异常

Java 的所有异常可以分为受检异常(checked exception)和非受检异常(uncheckedexception)。

受检异常

编译器要求必须处理的异常。正确的程序在运行过程中,经常容易出现的、符合预期的异常情况。一旦发生此类异常,就必须采用某种方式进行处理。除 RuntimeException 及其子类外,其他的Exception 异常都属于受检异常。编译器会检查此类异常,也就是说当编译器检查到应用中的某 处可能会此类异常时,将会提示你处理本异常——要么使用try-catch捕获,要么使用方法签名中用 throws 关键字抛出,否则编译不通过。

非受检异常

编译器不会进行检查并且不要求必须处理的异常,也就说当程序中出现此类异常时,即使我们没有try-catch捕获它,也没有使用throws抛出该异常,编译也会正常通过。该类异常包括运行时异常(RuntimeException极其子类)和错误(Error)。

十二、Git常用命令专题

工作中 Git 是一项必不可少的技能,在项目的开发进程中起着至关重要的作用。下面介绍一些 Git 在工作中的一些使用实践、常用流程、常用命令,供大家参考!

配置操作

本地操作

分支操作

变更历史

标签操作

远端交互

​获取方式:私信我,并发送【面试总结】即可获取最新Java面试题资料合集

最后

希望能帮助到你在面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

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

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

相关文章

Kafka 消息过期策略(时间相关参数)

Kafka 消息过期策略&#xff08;时间相关参数&#xff09; 标记delete时效 (CDH配置项)log.retention.ms &#xff08;Kafka offset配置&#xff09;retention.ms 标记delete的真删底层文件 delete.delay.ms log.segmetn.delete 背景&#xff1a;在不需要重启kafka的情况下&a…

QA特辑|剪得断,理不乱,一场直播解开关联网络与反团伙欺诈谜团

11月 10 日下午15:00 第九期《关联网络技术在业务安全中的应用》正式开讲。顶象数据科学家翼龙详尽的介绍了关联网络在反团伙欺诈中的作用&#xff0c;深度剖析了关联网络的技术框架、关联网络的图谱构建以及关联网络的复杂算法&#xff0c;为反团伙欺诈提供了重要的参考。 直播…

6.jeecg的pom结构

1.父pom parent为springboot 1.子模块部分 包括base-core、demo、system三个 air为自己新建 2.maven仓库部分 3.dependencies 这个是主动引入的依赖&#xff0c;子pom会继承 4.dependencyManagement 这个有点多&#xff0c;主要作用是先把依赖添加进来&#xff0c;但是…

python安装 learn2learn库 || 在线安装方式或者本地安装

文章目录1. 去github下载完整安装包&#xff08;或本文的百度网盘&#xff09;2. 安装C依赖库3 本地安装4 在线安装&#xff08;不想本地安装 看这儿&#xff01;&#xff09;1. 去github下载完整安装包&#xff08;或本文的百度网盘&#xff09; github连接 https://github.c…

死磕宠物食品安全,京东你凭什么?

出品| 大力财经 文 | 魏力 京东第一个站出来&#xff0c;破局宠物食品行业乱象。 济南女孩刘小姐很在乎宠物的饮食安全&#xff0c;每次换的新狗粮或者买的新零食&#xff0c;她都要先尝一尝&#xff0c;鉴定一下是否符合自家狗狗食用。随着家人式养宠的到来&#xff0c;宠物…

deb包格式实例详解

本文简介及包格式部分内容节选自&#xff1a; deb_百度百科 一、简介 DEB是Debian软件包格式的文件扩展名&#xff0c;跟Debian的命名一样&#xff0c;DEB也是因Debra Murdock而得名&#xff0c;她是Debian创始人Ian Murdock的太太。 Debian包是Unixar的标准归档&#xff0…

LeetCode第 91 场双周赛题解

目录2465. 不同的平均值数目2466. 统计构造好字符串的方案数2467. 树上最大得分和路径2468. 根据限制分割消息2465. 不同的平均值数目 模拟一下即可 class Solution { public:int distinctAverages(vector<int>& nums) {set<double>st;sort(nums.begin(),nums…

Intellij各个功能小件的样子

文章目录资料ControlsButtonBuilt-in buttonSplit buttonCheckboxCombo boxDescription textDrop-down listGot It tooltipGroup headerInput fieldLinkNotificationsBallonBannerProgress indicatorsLoaderProgress barProgress textRadio buttonScrollbarSearch fieldTableTa…

CSAPP实验记录(2)--------- Bomb

实验简介 本实验需要拆除一个“二进制炸弹”&#xff0c;“二进制炸弹”是一个可执行目标程序。运行时&#xff0c;它会提示用户键入6个不同的字符串。如果其中任何一个错误&#xff0c;炸弹就会“爆炸”。必须通过逆向工程和汇编语言知识&#xff0c;推导出六个字符串分别是什…

Linux权限管理

修改权限-chmod 通过chmod指令&#xff0c;可以修改文件或者目录的权限 第一种方式 - 变更权限 u:所有者 g:所有组 o:其他人 a:所有人 chmod urwx,grx,ox 文件目录名 chmod ow …

条件随机场CRF(持续更新ing...)

诸神缄默不语-个人CSDN博文目录 本文是作者学习CRF后的笔记。 最近更新时间&#xff1a;2022.11.15 最早更新时间&#xff1a;2022.11.15 条件随机场CRF是适宜于顺序预测任务的判别模型&#xff0c;可用于命名实体识别、词性标注等。 文章目录1. linear-chain CRF2. CRF目标…

使用TensorRT量化ResNet50网络(PTQ)

深度学习正在彻底改变行业提供产品和服务的方式。 这些服务包括用于计算机视觉的对象检测、分类和分割&#xff0c;以及用于基于语言的应用程序的文本提取、分类和摘要。 这些应用程序必须实时运行。 大多数模型都采用浮点 32 位算法进行训练&#xff0c;以利用更大的动态范…

python代码规范工具

文章目录一&#xff1a;Pycharm 创建文件自动头部二&#xff1a;代码门禁三 : 附录一&#xff1a;Pycharm 创建文件自动头部 Pycham —> Preferences —> 编辑器 —> 文件和代码模版 —> 文件 —> Python Script —> 填写头部 #!/usr/bin/env python # -*- c…

详解clickhouse分区目录的合并过程

数据存储底层分布 目录名类型说明202103_1_10_2目录分区目录一个或多个&#xff0c;由于分区LSM生成的detached目录通过DETACH语句卸载后的表分区存放位置format_version.txt文本文件纯文本&#xff0c;记录存储的格式 columns.txt&#xff1a;该文件是一个文本文件&#xff0c…

vue 生成二维码的两种方式

方式一&#xff1a;qrcode&#xff08;无 icon 图标&#xff09; npm i qrcodejs2 --save 完整代码 <template><div class"flex-box"><div>qrcode&#xff08;无 icon 图标&#xff09;</div><div class"qr-code" ref"…

【面试题】BFC的理解

1. BFC Block format context(BFC)&#xff0c;块级格式上下文。BFC是一个独立的布局环境&#xff0c;BFC内部的元素的渲染不会影响到边界以外的元素。 2. BFC的布局规则 BFC内部的块会在垂直方向上一个接一个的放置&#xff1b;垂直方向上的距离由margin决定&#xff0c;在…

vision transformer 剪枝论文汇总

Vision Transformer Pruning 这篇论文的核心思想很简单&#xff0c;就是剪维度&#xff0c;也就是说剪的是这个d。 具体方法就是通过一个gate&#xff0c;如图中的dimension pruning&#xff0c;输出0或者1&#xff0c;来判断不同维度的重要性&#xff0c;但是由于0和1&#xf…

最新CleanMyMac X4.12.1中文版Mac系统优化清理工具

CleanMyMac X v4.12.1是COCO玛奇朵搜集到的一款mac电脑系统清理工具&#xff0c;删除系统缓存文件 , 多余的应用程序语言包 , PowerPc软件运行库等。 CleanMyMac是一个强大的应用程序&#xff0c;清洁&#xff0c;优化和保护您的Mac多年的使用。运行即时系统清理&#xff0c;卸…

html+css实现容器显示两行文本超出部分以省略号显示

Bootstrap 给予响应式、移动设备优先的流式栅格系统提供了十分丰富的样式类&#xff0c;基于这些了可以做出很多好看的效果&#xff0c;虽让提供了常用基本样式类&#xff0c;但有一些比较特殊的需求 比如bootstrap 提供了 text-truncate 样式类&#xff0c;使用这个类可以轻松…

只开源36小时!GitHub标星139K从Java开发到软件架构师进阶笔记

什么是架构? 关于架构&#xff0c;我以前一直以为&#xff0c;只有真正从0到1&#xff0c;经历各种技术选型后搭建出来的一个系统框架&#xff0c;才算是真正的架构。 在程序员的现实世界里&#xff0c;不想当架构师的程序员不是个好程序员&#xff0c;即使你未曾主动想去当…