自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 收藏
  • 关注

原创 请你说说怎么保证线程安全

Atomic 类提供了一种线程安全的原子操作方式,如 AtomicBoolean,AtomicInteger等,这些类提供了相应的方法来保证在多线程环境下的原子性操作,避免了数据的竞争问题。线程安全是指在多线程环境下,程序的状态不会出现异常的问题,也就是说,多线程访问同一个共享资源时,不会出现数据冲突,数据不一致等问题。volatile 关键字可以保证共享变量的可见性,即使在多线程环境下,线程之间可以看到变量的最新状态,避免了数据的过期问题。① 使用 synchronized 关键字。

2023-06-18 23:40:42 207

原创 请你说说static修饰符的用法?

① 修饰变量:可以使用static关键字修饰成员变量,称为静态变量。静态变量是所有对象所共享的,不必创建对象就可以直接访问,因此可以通过类名进行访问。静态变量在内存中只有一份,会被所有对象所共享,因此修改静态变量的值会影响到所有使用该变量的对象。③ 修饰代码块:可以使用static关键字修饰代码块,称为静态代码块。④ 修饰内部类:可以使用static关键字修饰内部类,称为静态内部类。静态内部类与普通内部类的最大区别是,静态内部类无法访问外部类的非静态成员变量和成员方法,可以直接通过类名访问静态内部类。

2023-06-17 22:51:09 187

原创 Session是存储在什么地方,以什么形式存储的?

Session 对象存储在外部持久化存储中,比如数据库,文件系统等,可以保证Session不会丢失,但会增加系统的读写负担。同时,Session存储的形式也可以是键值对的形式,以键值对的方式存储Session对象的属性和值。:Session 对象存储在服务器的内存中,可以快速读写,但当服务器重启或者负载均衡到其他服务器时,Session 会丢失。而且受限于服务器内存大小,不适用于大量并发使用。根据实际应用场景和性能需求来进行选择。

2023-06-16 23:52:09 1411

原创 如果有几千个Session,怎么提高效率?

将 Session 信息存储在持久化存储中,如数据库,文件系统或NoSQL存储中,这样可以避免将所有Session信息存储在内存中,从而减少内存的使用量。:设置合理的 Session 失效策略,例如根据用户活动时间,最大不活动时间等来决定 Session 的失效时间,可以减少无用的Session信息。:将 Session 信息从一台服务器复制到另一台服务器上,这样可以实现负载均衡,并将会话信息在多个服务器之间共享。

2023-06-16 23:36:13 209

原创 请你说说session、cookie和cache的区别是什么

② Cookie 是一种在客户端存储数据的方式,通过在用户的浏览器上存储一个小型的文本文件来保存数据。Cookie 可以存储一些临时的用户数据,例如用户的偏好设置,购物车好内容等。③ Cache 是一种缓存数据的方式,可以将频繁访问的数据存储在内存中,以提高访问速度。Session 可以存储任何类型的数据,例如用户登录状态,购物车内容等。缺点:需要在服务器上进行存储和管理,会占用服务器的资源,需要开发人员进行维护。优点:数据的安全性高,不容易被恶意篡改和伪造,同时可以保存较大量的数据。

2023-06-16 23:19:45 1930

原创 请你说说索引的优点和缺点

② 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。③ 当对表中的数据进行增加,删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。③ 加速表和表之间的联系,特别是在实现数据的参考完整性方面特别有意义。⑤ 通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能。② 加快数据的检索速度,这也是创建索引的最主要原因。缺点:① 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。

2023-06-16 22:39:06 52

原创 谈谈你对数据库中索引的理解

数据库索引类似于书籍的目录,可以根据关键字快速定位信息,从而提高查询效率。因为每次进行这些操作时,都需要检查索引并更新它们,会导致写入操作的速度变慢。总之,索引是一个重要的数据库技术,能够显著提高查询效率。在使用索引时,需要综合考虑数据库的特性和应用程序的需求,来获得最佳的性能。在使用索引时,需要考虑哪些列应该进行索引,如何组织索引和优化索引。索引可以建立在一个或多个列上,包括主键,唯一约束和非唯一的列。数据库中的主键和唯一约束本身就是一种索引,用于确保表中的每行都是唯一的。在数据库中,索引可以。

2023-06-16 22:15:24 41

原创 请实现下面这个题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,不能申请额外的空间。

在这个方法中,首先判断输入字符串是否为空或者长度为 1,如果满足这些条件则直接返回原始字符串,否则进入双指针处理的 while 循环,直到 i >= j 时退出循环。,之后我们对字符数组进行操作实现字符串的处理,最后再将字符数组转换为字符串返回。需要注意的是,在这个过程中,输入的原始字符串并没有变化。② 当 i < j 时,依次对比字符串 i 和 j 位置的字符。① 定义两个指针 i 和 j ,初始化为字符串的首尾位置;③ 当 i >= j 时,完成字符串的处理。

2023-06-16 15:44:13 177 2

原创 请你说说关系型数据库的特点

关系型数据库严格遵循ACID规则(原子性,一致性,隔离性,持久性),能够保证事务在执行过程中的原子性,一致性,隔离性,持久性,避免了数据的破坏。因为数据库之前的关系比较清晰,使得数据库的维护更加容易。关系型数据库提供了一个通用的SQL语句,可以方便的进行CRUD操作,并且SQL具有丰富的查询功能。关系型数据库是一种基于 关系模型的数据管理系统,数据以表格的形式存在。关系型数据库具备一定的并发处理能力,在高并发,高可用的场景下有很强的应用能力。关系型数据库采用表格的形式来表示数据,易于存储,操作和管理。

2023-06-16 15:12:01 830

原创 请说一下java中HashSet如何检查重复

当两个元素的HashCode值不同,则说明它们不在同一个桶中,HashSet会直接将它们视为不同的元素;如果equals方法返回true,则HashSet会认为这两个元素是重复的,不加入该元素。添加元素的时候,会计算元素的HashCode值,通过HashCode值将元素存储到对应的桶中。当需要添加元素时,会计算元素的HashCode值,根据HashCode值来确定元素存放到哪一个桶中,如果该桶中已存在元素,则检查该元素和已有元素是否相同,如果相同则不加入该元素。

2023-06-16 14:27:17 494

原创 请说一下二叉树的层次遍历

该算法的时间复杂度是O(n),其中n是二叉树中的节点数;空间复杂度同样是O(n),因为在遍历过程中队列中最多可能存放n个节点。,它可以从二叉树的根节点开始,逐层地遍历二叉树,对于每一层节点,按照从左到右的顺序输出节点值。② 然后进入循环,每次从队列中取出队首元素,输出其值,并将它的左右子节点(如果有)入队;二叉树的层次遍历又叫做。③ 继续循环,直到队列被取空。① 首先将根节点入队。

2023-06-16 13:27:33 31

原创 请你说说 Socket 的过程?

建立连接完成之后,客户端和服务端之间可以通过创建输入流和输出流来实现数据的传输。② 建立连接,通过Socket对象的connect方法和服务器建立连接。⑤ 关闭连接,通过Socket对象的close方法来关闭和服务器的连接。② 服务端收到客户端的SYN报文后,向客户端发送 SYN-ACK 报文,表示允许建立连接。③ 客户端收到服务端的SYN-ACK报文后,向服务端发送 ACK 报文,表示建立连接成功。在TCP协议中,Socket建立过程分为三步:SYN,SYN-ACK,ACK。

2023-06-16 10:46:27 687

原创 给定一个字符串比如“abcdef”,要求写个函数变成“defabc”,位数是可变的。

在这个例子中,首先我们创建了一个StringBuilder对象,然后调用了reverse()方法将其中的字符序列反转,最后通过toString()方法将StringBuilder对象转为String类型并输出。其中,第一个参数beginIndex代表要截取的子串开始的索引位置,第二个参数endIndex(可选)代表要截取的子串结束的索引位置(④ 将两个字符串合并成一个新的字符串,即 “cbafed”,然后进行颠倒即可。是一个StringBuilder类的方法,它的作用是。是String类的一个方法,用于。

2023-06-15 19:36:14 718

原创 面试题:介绍一下包装类的自动装箱和自动拆箱

应用场景:比如说一个方法的参数是包装类型,调用时我们所持有的数据类型却是基本数据类型,可以不做任何处理,直接将持有的数据传给这个方法就行。自动装箱:将基本数据类型用他们的引用类型包装起来。得分点:自动装箱,自动拆箱,应用场景。自动拆箱:将包装类转化为基本数据类型。

2023-05-29 19:33:53 31

原创 面试题:请你说说Java的异常处理机制

③ 异常处理流程大概是:当try的业务代码出现异常,系统会生成一个异常对象给JVM,JVM会捕获异常对象,捕获之后会给catch,catch进行处理异常。如果JVM没有捕获到异常,则程序结束。② 异常处理语句由三个部分组成:try,catch,finally。try是业务代码,catch是捕获并处理异常的,finally是回收资源的。① 异常处理机制让Java程序具有容错性和健壮性,当程序运行出现状况时,系统会生成一个Exception 对象通知程序。④ 当程序出现异常时,也可以主动抛出异常。

2023-05-29 18:46:14 91

原创 面试题:说说你对面向对象的理解

优点:“运行时”,看“子类”,当子类重写了父类中的方法,则执行时一定执行子类中重写的方法体。变量引用子类的对象不同,执行的方法不同,实现了动态绑定,提高了代码的可维护性和可扩展性。案例:比如说将对象的属性私有化,外部程序不能直接调用对象的属性,可以通过类提供的get(),set()方法间接调用对象的属性。:继承是实现代码复用的重要方式,是通过 extends 关键字实现类的继承,实现继承的类称为子类,被继承的类称为父类。弊端:“编译时”,只能调用父类中声明的方法,不能调用子类中声明的方法。

2023-05-29 18:34:57 118

原创 泛型相关知识

泛型,有点像瓶子上的“标签”,可以在使用之前,表名某个xxx的类型是啥,用的时候即方便有安全。① 可以把类型检查提到“编译时”② 使用时,类型是安全的,不需要再强制类型转换。泛型如何设计的?或者说,如何传递类型的?用之前的知识来辅助理解它。之前学习方法的时候,我们有形参和实参的概念。为什么方法要有形参?因为方法体的功能实现,需要外界(使用者)给它提供数据,这个数据在编写方法体时,数据值是不确定的,需要在调用方法时,才能确定。例如:编写一个方法,可以求两个整数的和。return a+b;

2023-05-26 23:30:54 504

原创 File类和IO流的相关面试(二)

I:Input,数据的读取,数据的输入数据的输入,可以是从键盘输入,从文件读取,从网络接收...O:Output,写数据,数据的输出数据的输出,可以是输出到控制台,写到文件,发生到网络中...

2023-05-25 22:23:00 756

原创 File类与IO流相关面试知识(一)

返回返回所有满足指定过滤器的文件和目录。否则,当且仅当在路径名上调用过滤器的 FilenameFilter .accept(File dir, String name)方法返回 true 时,该路径名才满足过滤器。否则,当且仅当在路径名上调用过滤器的 FilenameFilter .accept(File dir, String name)方法返回 true 时,该路径名才满足过滤器。如果指定的某个文件或文件夹的路径名后,这个文件或文件夹在实际的路径下不存在,不影响创建File类的对象。

2023-05-24 16:28:40 741

原创 sleep()和wait()方法的区别?

因为我们调用wait()方法是由锁对象调用,而锁对象的类型是任意类型的对象。那么希望任意类型的对象都要有的方法,只能声明在Object类中。② sleep()指定休眠的时间,wait()可以指定时间,也可以无线等待直到 notify或notifyAll。③ sleep()在Thread类中声明的静态方法,wait方法在Object类中声明。① sleep()不释放锁,wait释放锁。

2023-05-21 21:44:53 37

原创 释放锁操作和死锁

② 线程执行同步代码块时,其他线程调用了该线程的 suspend()方法将该线程挂起,该线程不会释放锁(同步监视器)。① 线程执行同步代码块或同步方法时,程序调用 Thread.sleep(),Thread.yield()方法暂停当前线程的执行。② 当前线程的同步代码块,同步方法中出现了未处理的Error或Exception,导致当前线程异常结束。③ 当前线程在同步代码块,同步方法中执行了锁对象的wait()方法,当前线程被挂起,并释放锁。① 当前线程的同步方法,同步代码块执行结束。

2023-05-21 21:37:36 101

原创 守护线程(了解)

线程分为被守护线程和守护线程。当系统中所有的被守护线程都结束之后,守护线程就算自己的事情没有做完,也会自动结束。即系统中不会只有守护线程在单独运行。Java后台运行的GC线程等就是守护线程,当 main 线程结束了,GC线程就没必要存在的。

2023-05-21 21:14:00 181

原创 线程通信的等待唤醒机制

代码由 if 改为 while,当每次wait结束后,还要进行 total 判断,所以改为while。notify 改为 notifyAll ,本来是每次释放一个生产者或消费者,现在是释放所有生产者或消费者。(多个生产者和多个消费者有线程安全问题)一个(多)线程负责生产数据(即增加共享数据的值)一个(多)线程负责消耗数据(即减少共享数据的值)① 是否存在多个线程(2个或2个以上的线程)同步锁有两种加法:同步方法,同步代码块。分为两种:① 一个生产者和一个消费者。有线程安全问题,就一定要。

2023-05-21 18:52:49 524

原创 单例设计模式

设计模式:是前面的很多程序员根据自己的经验,总结出来的代码的套路,代码的模板。饿:很着急,无论你是否要用到这个类的对象,在类初始化的时候,就直接创建了它对象。单例设计模式是指某个类的对象在整个应用程序中只有唯一的一个。常见的经典的设计模式一共有23种,设计模式不分语言。懒:不着急,等你需要这个对象的时候,再创建这个对象。面试题:请写出懒汉式单例设计模式的示例代码。面试题:请写出饿汉式单例设计模式的示例代码。② 在类的内部创建好这个类的唯一对象。面试题:请写出单例设计模式的示例代码。3.单例设计模式的形式。

2023-05-21 18:00:23 504

原创 线程安全问题

因为每一个线程对象,都会调用一次 run 方法,而方法的每一次调用在 “栈” 中都会开辟独立内存空间。这里三个对象三次调用run方法,i 变量都是独立的。只有“占有”锁对象的线程才有机会执行被锁的代码,称为同步代码。即每一个对象都有一个标记位,标记现在那个线程“占有”这个锁对象。① 当synchronized锁的代码全部执行完,才会释放锁。案例2:实例变量,不是所有对象共享的,而是每一个对象独立的。① 任意类型的对象都可以当做监视线程的锁对象。③ 同步方法的锁对象是不能自由选择的,是默认的。

2023-05-21 17:01:04 542

原创 多线程相关知识(八股文)

(1)程序:① 是选择一种编程语言,完成一个功能/任务,而编写的一段代码,这段代码最后被编译/解释为指令。② 程序是一组指令的集合。③ 程序是静态的。当我们电脑,手机安装了一个程序之后,只是占用硬盘/存储卡的空间。(2)进程:① 一个程序的一次运行。② 当程序启动后,操作系统都会给这个程序分配一个进程的ID,并且会给他分配一块独立的内存空间。③ 如果一个程序被启动了多次,那么会有多个进程。④ 多个进程之间是无法共享数据。

2023-05-21 14:37:35 1044

原创 面向对象的第二个基本特征:继承011026

生活中:继承 ---> 延续---> 扩展代码中:继承 ---> 重复使用已有的类的代码(复用)---> 扩展已有类的代码(扩展)

2023-05-20 13:19:46 585

原创 面向对象的特征之一:封装

生活中,快递包裹,通常需要用袋子或箱子装起来。目的:① 包含的内部商品,不会被损坏② 可以包含隐私③ 运输更方便所以,代码也要考虑这些因素:① 隐私 -> 安全,当某个类的代码,内部某些成员不希望外部知晓,或者随意的更改,那么就可以进行适当的封装② 外部使用更方便比如:生活中,洗衣机,只会留出几个简单的按钮和进水口,出水口,放衣服的入口这几个,它隐藏了内部复杂的结构。代码中,String类,它内部的结构和实现是很复杂的,但是我们就算不是特别清除每一个内部实现,也不影响我们简单的使用。

2023-05-19 23:57:06 313

原创 IDEA 怎么自定义代码模板?

点击 Edit variables,Expression改为与自己代码需要的描述即可。② 点击 Editor -> Live Templates。① 打开idea -> File -> Settings。④ 输入自己定义的变量名,即可输出代码。③ 添加组名或组的变量名。

2023-05-19 23:43:11 674

原创 面向对象的基础特征之三:多态

① 多态引用的概念父类类型 变量 = new 子类的对象;② 多态的现象编译时类型和运行时类型是不一致的。编译时,这个变量是“父类”的类型。它只能调用父类中声明的方法运行时,这个变量是“子类”的类型。所以它会执行子类重写的方法体子类重写了父类的方法,通过父类的变量调用重写的方法时,执行的是子类重写后的代码。子类如果没有重写这个方法,还是执行父类中实现的方法体。对象的本质类型是子类的类型,只是编译器在编译时,把它看成父类的类型,或者把它当成父类的类型来“检查”

2023-05-19 15:57:23 784

原创 TCP和UDP的区别?

因为不需要建立连接,也不需要校验数据是否丢失,所以udp传递数据相对比较快,并且会把数据分成包,一个个发送,一个包最大是64kb。因为要建立连接和校验数据是否丢失,所以tcp的。另外tcp在建立连接之后,是以。,比如说支付宝转账。

2023-05-19 09:33:45 19

原创 请你说说hashCode()和equals()的区别,为什么重写equals()就要重写hashCode()?

② 由于hashCode()和equals()具有联动关系,所有equals()方法重写时,通常也要将hashCode()方法重写,使得两个方法始终满足约定。如果重写了equals方法,而没有重写hashcode方法,会出现equals相等的对象,hashcode不相等的情况,重写hashcode方法就是。③ 也就是说,equals()比较两个对象相等时,两个对象的hashCode()一定相等。④ 两个对象的hashCode()相等时,equals()比较的两个对象不一定相等。equals()主要用来。

2023-05-19 09:33:19 826

原创 Servlet是单例还是多例?是线程安全的吗?

当有大量请求过来的时候,不用创建多个对象,只需要创建一个对象,对tomcat的内存是非常友好的。可以改成多例,需要去。

2023-05-18 18:27:27 78

原创 return在finally前执行还是后执行?

如果在finally前面有return,那么也会先把finally中的代码执行完,再执行return,所以。当程序执行到return的时候,会结束这个方法,并且会把return后面的值,返回到方法调用的地方。finally是用在异常处理中,放在catch之后,finally中的代码是一定会执行的。

2023-05-18 18:21:25 1276

原创 JDK1.7和1.8的区别?

jdk8以后,加上一个原注解,让我们在同一个位置可以使用相同的注解,⑧ 新增base64加密和解密api,在jdk8以前,base64需要引入相应的jar包才能用,jdk8已经内置了base64。② stream流函数式操作,可以让我们对集合的操作变得更加简单,里面有非常多的方法处理集合中的数据。⑦ 全新的日期api,在jdk8以前,日期api不支持多线程的操作,并且对于时区的处理也非常麻烦。jdk8提供的新的日期api,在使用上面非常的方便,也支持多线程操作。⑥ 类型注解,让注解可以用在泛型上面。

2023-05-18 18:02:22 458

原创 java中有哪些流?各自的区别是什么?

③ 还可以将对象写入文件,读取出来进行序列化(ObjectOutputStream)和反序列化(ObjectInputStream)② 转换流,有可能要转换文字,转换文字的话可能会设置编码,通过转换流可以设置编码。④ 打印流,可以将数据进行原样打印。还有特别的流:(了解)① 缓冲流,可以提高流的读写效率。指的是将文件中的数据读取到程序中(向程序中读入数据)指的是将程序中数据写到文件中(从程序中向外写出数据)操作的类型是字节,可以操作计算机中任何类型的数据。这些流通常操作的对象是文件。

2023-05-18 17:49:03 562

原创 请说一下final关键字(final对类,方法,变量的影响)

当final修饰变量,这个变量只能使用一次等号赋值,再也不能更改,也就是常量。final既可以修饰成员变量,也可以修饰局部变量,形参。当final修饰类的时候,这个类不能被继承。当final修饰方法,这个方法不能被重写。final关键字表示最终的不可变的意思,

2023-05-18 17:07:35 24

原创 equals和 == 的区别

= 号:如果是基本数据类型,比较的是数据内容是否相等。如果是引用数据类型,比较的是对象的内存地址是否相等。,重写之前比较的是两个对象的内存地址是否相等,重写之后比较的是对象的内容是否相等。equals:equals方法是。

2023-05-18 16:55:58 16

原创 对继承的理解

特点:在java中使用extends关键字声明继承关系,而且类和接口都拥有继承的能力,只不过类只能是单继承,但是允许多重继承,也就是java中只能有一个直接父类,但是可以有多个间接父类。继承是当多个类中存在相同的属性和行为时,可以将相同的属性和行为抽取到单独的类中,多个类无需再定义这些属性和行为,只要继承一个单独的类即可,这就是继承的作用和使用场景。优点:继承可以提高代码的复用性,也可以提高代码的维护性,因为继承建立了类与类之间的关系,这是面向对象中多态的前提。而接口可以实现多继承。

2023-05-18 16:46:14 19

原创 String,StringBuilder,StringBuffer的区别?

而StringBuilder和StringBuffer相当于字符串容器,在java中可以使用StringBuilder和StringBuffer。,无论是字节还是字符数组,都使用了final关键字对数组进行了修饰,所以string类的内容是不可变的,我们。等操作,StringBuilder和StringBuffer的API基本一样,功能基本一样,最大区别在于。从应用场景上:String类一般用于少量字符串的操作;,在jdk9之后,String类的底层改为了。相同点:都是java提供的字符串操作的类,

2023-05-18 16:35:05 455

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除