自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java常见面试题

2、java容器,单列集合(ArrayList LinkedList vertor的区别),双列集合(set map)。1、字符流和字节流区别和应用场景,benchmark工具如何处理上传csv的?14、CR的关注点讲到null值和空值的判断,那么null和空的区别是什么?10、Java异常有哪些,如何处理异常,有哪些关键字?15、final关键字的应用(修饰变量、方法、类)9、实现线程的3种方式,线程池的核心参数。11、反射(讲清楚机制),反射的应用场景。7、接口和抽象类的区别,具体的应用场景。

2023-08-08 20:25:40 82

原创 面试算法题

面试常见算法题

2023-08-08 18:41:37 91

原创 Mysql的数据类型

需要注意的是,每个字符的实际占用空间取决于使用的字符编码。因此,在使用 varchar(20) 存储 UTF-8 编码的字符时,实际占用的存储空间可能超过 20 个字节。在MySQL中,varchar 类型用于存储可变长度的字符数据,最多可以存储指定长度的字符。varchar(20) 表示该字段最多可以存储 20 个字符,并且当存储的字符数小于这个长度时,实际占用的存储空间也会相应减少。总结来说,varchar(20) 中的 20 表示该字段最大可存储的字符数,单位是字符。

2023-07-29 18:07:39 74

原创 4、隔离级别&数据一致性问题

事务A修改字段a=10改为20的过程中,事务B读取到未提交的a=10,当事务A提交后 a=20,但是事务B读到的是10。幻读:在一个事务内,连续多次查询返回的结果集合不一致,因为其他事务插入或删除了满足查询条件的数据。不可重复读:在一个事务内,对同一条记录进行多次读取时,得到的结果不一样。脏读:一个事务读取了另一个事务未提交的数据。Java中默认的隔离级别为可重复读。会产生的数据一致性问题。

2023-07-29 18:05:40 47

原创 MySQL面试问题

关于索引的介绍 新增一个字段如何进行测试? varchar的单位是字符还是字节? 隔离级别&数据一致性问题 简单的sql语句编写

2023-07-29 18:02:33 25

原创 接口&抽象类

3、方法实现:接口中的方法都是抽象的,不包含具体的实现,需要由实现类提供具体实现。5. 多态性:通过实现不同的接口,类可以具备多个角色,从而实现多态性。抽象类用于充当类的模板,提供公共的属性和方法的实现。7. 调用方式:接口的方法调用需要通过实现类实例化对象来调用,而抽象类的方法调用可以直接通过抽象类实例化对象来调用。1、定义规范:明确类应该实现的方法,确保不同的实现类有相同的方法,达到统一的行为约定。接口:描述一类事物的特征(鸟、飞机、昆虫都会飞,不同的实现类来具体实现不同的飞法)

2023-07-29 17:47:08 24

原创 重载和重写

2、子类重写父类的方法(父类的具体实现方法和抽象方法都可以被重写)重载:同一个类中,对相同的方法名,对不同的入参有不同的实现方法。重写: 1、实现类重写接口的方法(均为抽象方法的重写),返回值类型子类

2023-07-29 17:44:06 21

原创 String,StringBuffer与StringBuilder的区别

StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间。

2023-07-29 17:41:01 20

原创 length、length()、size() 的区别

size():size()是集合类(如List、Set、Map等)的方法,用于获取集合中元素的个数或映射表的大小。length:length是一个关键词,主要用于获取数组的长度。对于数组来说,length是一个公有的实例变量,通过数组对象的属性来获取数组的长度。length():length()是一个字符串(String)对象的方法,用于获取字符串的长度。需要注意的是,不同类型的对象使用不同的方法来获取其长度或大小。length适用于数组,length()适用于字符串,size()适用于集合类。

2023-07-29 17:39:11 5932

原创 java中的锁机制

synchronized可以应用于方法和代码块,它使用内置的监视器锁(也称为内置锁或互斥锁)来确保同步访问。公平锁(FairLock)和读写锁(ReentrantReadWriteLock)最好用try-catch-finally来实现,unlock放到finally中。lock等待锁过程中可以通过interrupt来中断等待。lock可以通过trylock来知道是否获取锁。否,必须手动unlock,可能会发生死锁。可重入、可中断、公平锁与非公平锁。不可重入、不可中断、非公平。condition进行调度。

2023-07-29 17:36:27 43

原创 哈希、哈希冲突、 hashCode() 和 equals() 方法的作用是什么?

作用:用于处理对象的比较和哈希操作。

2023-07-29 17:35:06 32

原创 遍历集合的4种方式

2、增强for循环 foreach。

2023-07-29 15:56:07 23

原创 stream API的常用函数

1. `filter(Predicate<T> predicate)`:根据给定的条件(Predicate)过滤集合中的元素,返回一个满足条件的新 Stream。2. `map(Function<T, R> mapper)`:将集合中的每个元素通过给定的函数(Function)进行转换,返回一个转换后的新 Stream。5. `sorted(Comparator<T> comparator)`:对集合中的元素根据给定的 Comparator 进行排序。10. `findAny()`:返回任意一个元素。

2023-07-29 15:54:29 38

原创 Token鉴权

需要注意的是,在实际应用中,为了增强安全性,Token通常会设置过期时间,并采用加密算法对Token进行签名和验证。常见的Token类型有两种:基于Session的Token和基于JSON Web Token (JWT)的Token。5. 服务端接收到请求后,根据携带的Session ID进行验证,如果验证通过,则允许客户端访问相应资源。5. 服务端接收到请求后,对Token进行解析和验证,如果验证通过,则允许客户端访问相应资源。6. 服务端对Token进行验证,验证通过后允许客户端访问相应资源。

2023-07-29 15:52:55 629

原创 lambda表达式

无论是JDK内置的`Runnable`、`Comparator`接口还是自定义的接口,只有当接口中的抽象方法存在且唯一时,才可以使用Lambda。- 为了排序,`Arrays.sort`方法需要排序规则,即`Comparator`接口的实例,抽象方法`compare`是关键;- 必须覆盖重写抽象`compare`方法,所以方法名称、方法参数、方法返回值**不得不**再写一遍,且不能写错;- 为了省去定义一个`ComparatorImpl`实现类的麻烦,**不得不**使用匿名内部类;

2023-07-29 15:51:39 19

原创 字符流/字节流

需要注意的是,Java提供了字符流和字节流之间的转换类(如InputStreamReader和OutputStreamWriter),可以在字符流和字节流之间进行转换。而字节流用于处理二进制数据或字节流形式的数据,以字节为单位进行操作。字节流主要用于处理二进制数据或字节流形式的数据(如图片、音频、视频等)。- 对于处理二进制数据或字节流形式的数据(如读取/写入图片、音频、视频等),使用字节流更为适合和灵活。- 对于处理文本数据(如读取文本文件、写入文本文件、处理文本流),使用字符流更为方便和高效。

2023-07-29 15:40:09 731 1

原创 消息队列的测试点

消息持久化测试:验证消息队列支持消息的持久化存储。测试包括在消息发布者和消息订阅者之间进行重启或断开连接后,已发送的消息是否能够正常保存和恢复。测试包括消息的发布、订阅、发送、接收和确认等操作,确保消息按照预期的方式在队列中传递和处理。容错和异常处理测试:测试消息队列在出现异常情况下的容错和异常处理能力。消息顺序性测试:测试消息在队列中的顺序性是否满足要求。安全性测试:测试消息队列的安全性,包括数据加密传输、身份验证、访问控制等方面的测试,确保消息在传输和存储过程中的安全性。回滚:验证消息回溯是否生效。

2023-07-29 15:22:25 325

原创 MQ & kafka

4、系统解耦与流程协同:比如订单系统可以通过消息队列与库存系统进行交互,实现订单创建、修改、取消等操作。kafka是分布式系统,具有高度可伸缩性和高吞吐量,可以通过增加kafka的分区和节点来提高吞吐能力。分区内有序,不同分区不能保证有序,通过消息偏移量(offset)来指定消息的顺序。1、解耦:发送者和接收者的解耦,都与中间的消息队列进行交互就好。单节点或者简单集群的结构,随着负载的增加,吞吐量可能会受到限制。2、削峰:如秒杀活动中将请求放在队列中,避免突增的QPS。5、发布/订阅模式(广播模式)

2023-07-29 14:55:13 29

原创 java线程池

3. 提高线程的可管理性。可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)。ThreadPoolExecutor的入参6个:核心线程数、最大线程数、线程空闲时间、时间单位、任务队列、拒绝策略。容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。

2023-07-29 14:48:26 19

原创 实现线程的3种方式

实现 Callable 接口创建线程需要借助 FutureTask 类和 ExecutorService 线程池来启动线程。1. 定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务,因此把run()方法称为线程执行体。2、new Runable接口的实现类对象,将实现类对象作为线程对象的入参新建Thread类线程对象。2、解耦:实现类中重写的run方法可以被多个new的thread实现,代码可以被多个线程共享。

2023-07-29 13:34:30 27

原创 java反射

Java的反射(reflection)机制是指在程序的运行状态中,动态获取类信息和方法还能调用这些属性和方法。5、框架拓展:如spring框架就是使用反射机制来实现依赖注入、AOP(面向切片编程)的功能。1、动态加载类对象、方法:根据配置文件动态获取不同的服务实现类。2、API调用和接口编程的适配:根据运行环境动态调用不同的接口。对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;4、序列化和反序列化。

2023-07-29 13:32:20 13

原创 线程/进程、并行/并发

进程:由于进程拥有独立的地址空间和资源,进程之间的切换开销较大。线程:同一进程内的线程共享进程的地址空间和资源(如文件描述符、打开的文件等)。线程:线程是进程的执行单位,一个进程中的多个线程可以并发执行。线程:由于线程共享进程的地址空间和资源,线程之间的切换开销较小。线程:进程的执行单元,同一个进程内的线程共享进程的资源,线程之间切换开销小,一个进程中的线程可以并发执行。线程:线程是进程中的执行单元。进程:比如一个程序,每个进程有单独的资源开销,进程之间切换开销大,可以并发执行,互不影响。

2023-07-29 13:30:37 36

原创 序列化和反序列化

将对象(对象的状态(即对象的数据)以及类的信息(包括类的名称、成员变量、方法等))转换为二进制字节流方便存储和传输,在需要用时将其还原为对象的过程。3、创建输入流进行反序列化:使用 ObjectInputStream 类从输入流中读取字节流并将其反序列化为对象。2、网络传输:分布式系统中序列化传输而不是直接对象传输(好处:跨平台兼容、高效、可以去除敏感数据传输更加安全)2、创建输出流进行序列化:使用 ObjectOutputStream 类将对象序列化为字节流并写入输出流。1、对象的持久化存储。

2023-07-29 13:27:44 10

原创 RPC/Thrift

参考:https://www.cnblogs.com/111testing/p/11296880.html。

2023-07-29 13:00:09 39

原创 null / empty

在Java中,"null"和"空"(empty)是两个不同的概念。

2023-07-29 12:51:59 400

原创 Java异常

类,一般由JVM(Java虚拟机)抛出,例如内存溢出错误(OutOfMemoryError)和栈溢出错误(StackOverflowError)等。在Java中,异常(Exception)可以分为三个主要的分类:检查异常(Checked Exception)、运行时异常(Runtime Exception)和错误(Error)。类,包括编程逻辑错误、输入输出错误等。运行时异常:空指针、数组越界、非法参数异常、算术异常(比如分母为0)、类转换异常。:这类异常是由程序错误导致的,也称为非检查异常。

2023-07-29 12:50:36 16

原创 final修饰符

因此,final类常常被用于创建不可变对象,例如String类就是一个典型的final类。性能优化:final类在编译时可以进行一些优化,因为final类中的方法或成员变量无法在运行时被覆盖或修改。API设计:在设计一个API时,如果想要确保某个类的行为不会被子类修改,可以将该类声明为final。安全性:当一个类包含敏感操作或重要的业务逻辑时,可以将该类声明为final,以防止其他人通过继承来修改或篡改其行为。这对于确保类的完整性和安全性非常有用。final修饰类:不可以被继承,防止被其他类修改或拓展。

2023-07-29 12:44:55 17

空空如也

空空如也

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

TA关注的人

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