Java
文章平均质量分 92
Java系列总结,包含Java面试题总结
路上阡陌
得不高歌失不忧
展开
-
SQL JOIN
在这个查询中,即使某个员工没有对应的部门(即 department_id 在 departments 表中不存在),该员工的名字仍然会出现在结果集中,而 department_name 列将包含 NULL 值。在这个查询中,即使某个部门没有员工(即该部门的 id 在 employees 表的 department_id 列中不存在),该部门的名字仍然会出现在结果集中,而 name 列将包含 NULL 值。当涉及到 SQL 中的 JOIN 操作时,理解其背后的实现原理以及每种连接方式的区别是非常关键的。原创 2024-03-28 16:22:25 · 772 阅读 · 1 评论 -
正向代理和反向代理
hosts文件是一个没有扩展名的系统文件,它允许用户手动指定某些域名与IP地址之间的映射关系。这个文件通常位于操作系统的特定目录下,如在Windows系统中位于。原创 2024-03-18 08:24:21 · 918 阅读 · 0 评论 -
Javac 和 Javap
总的来说,Javac负责将Java源代码编译成字节码,而Javap则用于分析和学习这些编译后的字节码内容。两者都是Java开发者工具箱中的重要工具,对于Java程序员来说,熟悉这些工具的使用是非常重要的。掌握这些基础知识对于Java开发者来说非常重要,因为它们是日常开发中不可或缺的工具。方法引用和构造器引用是Java 8中引入的一种新的语法特性,它们允许我们更简洁地表示Lambda表达式。是指通过使用已经存在的方法来代替Lambda表达式。是指通过使用类的构造函数来创建对象。,用于分析字节码文件。原创 2024-03-16 08:28:26 · 951 阅读 · 0 评论 -
Lambda 表达式
这些函数式接口提供了一种标准化的方式来表示函数,使得我们可以使用Lambda表达式来创建匿名函数,并将其作为参数传递给其他方法。Java中的匿名函数是指没有名字的函数,通常用于简化代码或者作为参数传递给其他方法。在Java中,匿名函数主要有两种形式:Lambda表达式和匿名内部类。函数式接口的主要作用是提供一种标准的方式来表示函数,使得我们可以使用Lambda表达式来创建匿名函数,并将其作为参数传递给其他方法。Lambda表达式是一种简洁的表示匿名函数的方法,它允许我们将函数作为参数传递给其他方法。原创 2024-03-15 16:22:38 · 951 阅读 · 0 评论 -
笔试刷题记录(二)
BC正确,选项B解释,java核心卷I中43页有如下表述:两个数值进行二元操作时,会有如下的转换操作: 如果两个操作数其中有一个是double类型,另一个操作就会转换为double类型。”是错误的,因为异常通知和返回通知是两种不同的通知类型,它们的触发条件是不同的。因此,这两种通知之间没有先后顺序的关系,它们的触发取决于目标方法的执行结果是正常返回还是抛出异常。C选项:f1 == f3,f3没有new创建,而是由f1赋值,所以f3地址是指向f1的,f1值改变,相当于改变f3值,所以相等。原创 2024-03-08 08:20:37 · 883 阅读 · 0 评论 -
笔试刷题记录(一)
(2)成员内部类拥有与外部类同名的成员变量时,会发生隐藏现象,即默认情况下访问的是成员内部类中的成员。在Java中,可以将一个类定义在另一个类里面或者一个方法里边,这样的类称为内部类,广泛意义上的内部类一般包括四种:成员内部类,局部内部类,匿名内部类,静态内部类。(1)局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内;(4)成员内部类是依附外部类而存在的,也就是说,如果要创建成员内部类的对象,前提是必须存在一个外部类的对象;原创 2024-03-07 08:27:30 · 727 阅读 · 0 评论 -
HTTP 和 TCP 的区别
HTTP被设计成无状态的,这意味着每次通信后,连接就会关闭,不会保存之前的请求或响应的内容。传输控制协议(TCP)是一种面向连接的、可靠的传输层通信协议,它为数据通信提供了稳定的全双工流服务。例如,如果在三次握手过程中服务器发出的SYN-ACK丢失了,客户端将不会收到这个报文段,并且在超时后重新发送SYN进行连接尝试。同样,在四次挥手过程中,如果客户端发送的ACK丢失了,服务器将再次发送FIN以确认连接是否关闭。在TCP通信过程中,可能会出现各种异常情况,比如丢失的报文段、网络延迟、重复的报文段等。原创 2024-03-06 08:33:22 · 2983 阅读 · 0 评论 -
MYSQL 索引
在使用组合索引时,查询条件必须包含索引的最左侧列,否则索引将不会生效。在选择索引时,应该根据实际的数据特性和查询需求来决定最合适的索引类型。:在索引列上使用 IS NULL 或 IS NOT NULL 可能会导致索引失效,因为索引是不索引空值的。针对这些情况,开发者应尽量避免上述情况的发生,通过优化查询语句来确保索引的有效使用,从而提高数据库查询的性能。:如果查询中的值与索引列的数据类型不匹配,可能会发生隐式类型转换,导致索引失效。:在 OR 条件中,如果只有一个条件字段是索引,那么该索引失效。原创 2024-03-05 08:49:05 · 1076 阅读 · 0 评论 -
MySQL InnoDB 支持三种行锁定方式
DECIMAL 和 FLOAT 的区别是:DECIMAL 是定点数,FLOAT/DOUBLE 是浮点数。DECIMAL 可以存储精确的小数值,FLOAT/DOUBLE 只能存储近似的小数值。DECIMAL 用于存储具有精度要求的小数,例如与货币相关的数据,可以避免浮点数带来的精度损失。在 Java 中,MySQL 的 DECIMAL 类型对应的是 Java 类 java.math.BigDecimal。InnoDB 行锁是通过对索引数据页上的记录加锁实现的,MySQL InnoDB 支持三种行锁定方式:间原创 2024-03-04 09:27:41 · 945 阅读 · 0 评论 -
Java的基本数据类型和引用数据类型
总的来说,LinkedList的内存管理方式使其在处理频繁的插入和删除操作时具有优势,因为它不受内存碎片化的影响,可以更灵活地管理内存。例如,你可以组合多个简单的命令来完成复杂的任务,这种工作方式类似于流水线,每个环节处理特定的任务,然后将结果传递给下一个环节。总的来说,Spring Framework是基础,Spring MVC是构建在其上的Web框架,而Spring Boot则是为了简化Spring应用的开发和部署流程而产生的。总之,了解以上场景可以帮助开发者避免索引失效的问题,提高数据库查询的效率。原创 2024-03-03 08:51:14 · 1389 阅读 · 0 评论 -
Redis 集群
Redis 主从复制、Redis Sentinel 和 Redis Cluster 是 Redis 提供的三种高可用性解决方案。下面将详细介绍这三种方案的原理、配置及实例。一、Redis 主从复制Redis 主从复制是一种数据备份和读写分离的方案。在这种方案中,一个 Redis 服务器作为主节点(Master),其他一个或多个 Redis 服务器作为从节点(Slave)。主节点负责数据的写入,从节点负责数据的读取。从节点会实时同步主节点的数据,以保证数据的一致性。其中,和。原创 2024-03-02 08:48:37 · 846 阅读 · 0 评论 -
谈谈 JWT
私有声明是自定义的声明,它可以被添加到JWT中以提供额外的信息,但并不是所有的JWT都包含私有声明。私有声明是特定应用程序或组织的需要,并且它们的用途和结构可能会根据每个特定的用例而有所不同。这个属性的值是一个字符串,指示所使用的加密算法,例如"HS256"表示HMAC SHA256。在使用JWT时,需要注意保护好私钥和敏感信息,以确保系统的安全性。它通常用于身份验证和授权。有效载荷是存放有效信息的地方,这些信息包含了三个部分:注册声明、公共声明和私有声明。这是在所有JWT中都存在的声明,它们不是可选的。原创 2024-03-01 09:26:22 · 913 阅读 · 0 评论 -
Spring Security的基本概念和用法
Spring Security是一个功能强大且可高度自定义的身份验证和访问控制框架。它是为Java应用程序提供全面的安全解决方案,包括身份验证、授权、防止跨站请求伪造(CSRF)等。Spring Security基于Spring框架,可以轻松地与Spring Boot、Spring MVC等其他Spring项目集成。原创 2024-02-29 09:04:35 · 1295 阅读 · 0 评论 -
Spring AOP 相关注解
在面向对象编程中,横切关注点通常是一些通用的、重复的逻辑,例如日志记录、事务管理、安全性检查等。通过定义切点,我们可以精确地指定在哪些方法上应用切面的逻辑,从而提高代码的可维护性和重用性。通过使用这些通知类注解,我们可以在不同的阶段插入自定义的行为,例如日志记录、权限检查、事务管理等。为了控制这些切面的执行顺序,可以使用。请注意,切点表达式可以根据具体需求进行灵活的组合和调整,以满足不同的切面逻辑。是Spring框架中的一个注解,用于定义切面的执行顺序。注解的值可以是负数,表示在默认的执行顺序之后执行。原创 2024-02-28 10:39:52 · 948 阅读 · 0 评论 -
Spring 的三级缓存机制
这时,bean B 也需要依赖 bean A,但由于 bean A 的工厂对象已经在三级缓存中,Spring 可以直接从三级缓存中获取到 bean A 的工厂对象,并通过它来创建 bean A 的实例。而对于需要被AOP代理的Bean,singletonFactories中的工厂对象会先创建一个原始的Bean实例,然后通过AOP代理来生成代理对象,并将代理对象放入一级缓存singletonObjects中。:在Spring中,AOP代理是在Bean的初始化阶段完成的,这意味着所有的属性填充和方法调用之后。原创 2024-02-27 15:03:14 · 5506 阅读 · 0 评论 -
SpringMVC的执行流程
处理器映射器通过不同的策略来查找处理器,这些策略可以是基于注解的、基于XML配置的或者基于Java配置的。通过合理地使用这些传播行为,可以确保业务逻辑的正确执行,同时避免事务相关的常见问题,如死锁和不一致的数据状态。它允许你在一个现有的事务中开启新的“事务”,以便能够在出现异常时仅回滚部分操作。:创建一个新的事务,并且暂停当前事务(如果存在)。:以非事务方式执行操作,如果存在事务,就把当前事务挂起。:支持当前事务,如果当前没有事务,就以非事务方式执行。:使用当前的事务,如果当前没有事务,则抛出异常。原创 2024-02-26 19:56:59 · 1136 阅读 · 0 评论 -
Spring Bean 是线程安全的吗
它的主要目的是降低代码之间的耦合度,提高代码的可维护性和可测试性。在开发过程中,应当仔细考虑Bean的作用域和状态管理,以确保应用程序在多线程环境下的正确性和稳定性。线程安全是指在多线程环境下,当多个线程访问某些共享资源时,无论操作系统如何调度这些线程,程序都能正确执行,不会出现数据不一致或者其他意外情况。总结来说,连接点是程序中可以插入切面逻辑的具体位置,而切入点是一种机制,用于选择哪些连接点将被切面逻辑所影响。,它定义了一组连接点,即在这些连接点上可以应用切面的逻辑。类的所有方法,因为没有过滤条件。原创 2024-02-22 16:41:16 · 930 阅读 · 0 评论 -
ArrayList 与 LinkedList 区别
随着元素的增加,当数组的容量不足以容纳新的元素时,ArrayList 会自动扩容,即创建一个新的更大的数组,并将旧数组的元素复制到新数组中。我们先来说value 为什么不能为 null ,因为ConcurrentHashMap 是用于多线程的 ,如果map.get(key)得到了 null ,无法判断,是映射的value是 null ,还是没有找到对应的key而为 null ,这就有了二义性。的静态常量,并为其分配一个唯一的值,可以确保在不同版本的类之间进行序列化和反序列化操作时不会出现兼容性问题。原创 2024-02-15 09:29:04 · 1245 阅读 · 0 评论 -
JDK 动态代理
对于 public 方法,使用 CGLIB 进行代理也是可行的,但关键在于 CGLIB 的代理机制提供了一种能力去代理那些在 JDK 动态代理中无法代理的方法。在 CGLIB 中,当目标类没有实现任何接口时,或者你想代理的是类的非 public 方法时,CGLIB 通过生成目标类的子类来实现代理。然而,对于 public 方法,如果你的目标类实现了一个或多个接口,并且你只想代理这些接口中定义的 public 方法,那么使用 JDK 动态代理通常是更好的选择,因为它更简单、性能也通常更好一些。原创 2024-02-12 21:25:00 · 854 阅读 · 0 评论 -
Java 多态
所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。这句话的意思是,在具有多态性特性的程序中,当一个方法被调用时,具体调用哪个类的实现是在程序运行的时候才确定的,而不是在编写代码时就固定下来的。类型的引用,而不能假设它们指向具体的子类对象,这是为了保证代码的泛型性和灵活性,同时也是为了提高代码的可维护性和可扩展性。原创 2024-02-11 08:27:20 · 796 阅读 · 0 评论 -
为什么说重载发生在编译期而重写发生在运行期
Java包装类的缓存机制是在Java 5中引入的。该机制主要用于自动装箱过程,以提高性能和节省内存。当通过自动装箱将基本类型转换为包装类型时,会首先判断数值是否在特定范围内。对于Integer类来说,默认的缓存范围是-128到127。如果数值在这个范围内,就会从缓存中获取对应的包装对象,而不是创建一个新的对象。这个范围的最大值可以通过系统属性来设置。这种机制适用于Byte、Short、Integer、Long、Boolean、Character等包装类。原创 2024-02-10 15:57:10 · 1003 阅读 · 0 评论 -
@Repository 与 @Mapper的区别
是 Spring 框架提供的注解,用于指定 Spring 容器扫描的包路径。它的作用是将指定包及其子包下的所有类进行扫描,并自动将符合条件的类注册为 Spring 容器中的 bean。使用在启动类上添加注解,并指定要扫描的包路径:在配置文件中配置属性,指定要扫描的包路径:当 Spring 容器启动时,会自动扫描指定的包路径,并将符合条件的类注册为 bean。符合条件的类包括使用了@Component@Service等注解的类。需要注意的是,如果同时使用了和注解,可能会导致重复扫描的问题。原创 2024-02-07 09:21:46 · 2593 阅读 · 0 评论 -
Java面试总结(一)
函数式编程的另一个特点是高阶函数,即可以接受函数作为参数或返回函数的函数。Java EE 则是在 Java SE 的基础上构建的,是针对企业应用程序的扩展版本,提供许多专门的API和开发工具,例如用于Web服务的JAX-WS、用于消息队列的JMS、用于事务的JTA、用于持久化的JPA等等。对于Java而言,它多态的实现机制遵循一个原则:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。原创 2023-02-28 09:17:36 · 209 阅读 · 0 评论