JAVA
文章平均质量分 58
shumeigang
这个作者很懒,什么都没留下…
展开
-
DFA 算法
通过百度可以知道dfa是确定有穷自动机的缩写。应该还会见到类似下面图的说明原谅我实在一些,我这人数学不好不说,貌似看图能力也不行,这个图恕我直言我没看懂。所以关于精准的解释,请大家去百度或者 google 自行查阅了。我们一批需要检测词库,比如下面这些日本人,日本鬼子,日本人傻,破解*版先做个解释,前三个大家都能看懂,那么是什么,这个是我定义的通配符,代表着可以是 0 - n 个占位符用来替代在关键词中间插入混淆字符。至于可以替换几个我们可以在代码中进行定义,需要注意 n 越大,速度就会越慢。原创 2024-05-23 09:35:14 · 689 阅读 · 0 评论 -
Web Server failed to start.Port 8002 was already in use
解决端口号占用问题:Web Server failed to start.Port 8002 was already in use.发现8002端口号被占用的进程,最后一个数据是进程ID。win+r打开cmd命令行窗口。,查看启动的进程ID。原创 2024-05-21 13:35:59 · 335 阅读 · 0 评论 -
java内存泄露和如何避免内存泄漏
在这种情况下,垃圾回收器是不会回收B对象的,这就可能造成了内存不足问题,因为A可能不止引用着B对象,还可能引用其它生命周期比A短的对象,这就造成了大量无用对象不能被回收,且占据了昂贵的内存资源。同样的,B对象也可能引用着一大堆对象,这些被B对象引用着的对象也不能被垃圾回收器回收,所有的这些无用对象消耗了大量内存资源。什么是内存泄露内存泄露的定义:对于应用程序来说,当对象已经不再被使用,但是Java的垃圾回收器不能回收它们的时候,就产生了内存泄露。如下图所示,展示了哪些对象是无用对象,哪些是未被引用的对象;原创 2024-05-11 13:39:56 · 131 阅读 · 0 评论 -
java双亲委派
双亲委派(Parent Delegation)是Java类加载机制中的一种设计模式,用于确保类的加载安全性和一致性。在双亲委派模式下,一个类加载器在加载类时首先委托给其父类加载器,只有在父类加载器无法加载该类时,才由子类加载器尝试加载。但在某些特殊情况下,比如实现热部署、类隔离等功能时,可能需要自定义类加载器来实现特定的加载策略。这种机制有助于保证类的加载过程中不会出现重复加载同一个类的情况,从而避免了类的冲突和混乱。原创 2024-05-11 11:14:53 · 304 阅读 · 0 评论 -
java io包
它将一个字符串转换为字节流,但由于它使用的是默认的字符编码,因此可能导致在处理非 ASCII 字符时出现问题。它通常用于在内存中处理二进制数据,比如处理内存中的图片数据或者处理网络数据。:用于将多个输入流串联起来,形成一个顺序读取的输入流。它接受两个输入流作为参数,在读取时先从第一个输入流读取数据,当第一个输入流读取结束后再从第二个输入流读取数据,依次类推。是一个抽象类,不能直接实例化,通常通过其具体的子类来实现不同的输入流功能,如。类提供了许多子类,用于从不同的数据源读取数据,如文件、网络连接、内存等。原创 2024-05-09 18:08:09 · 110 阅读 · 0 评论 -
BIO,NIO,AIO 有什么区别?
NIO (New I/O): NIO是一种同步非阻塞的I/O模型,在Java 1.4 中引入了NIO框架,对应 java.nio包,提供了 Channel , Selector,Buffer等抽象。AIO 是异步IO的缩写,虽然 NIO 在网络操作中,提供了非阻塞的方法,但是 NIO 的 IO 行为还是同步的。对于 NIO 来说,我们的业务线程是在 IO 操作准备好时,得到通知,接着就由这个线程自行进行 IO 操作,IO操作本身是同步的。因此,我们需要一种更高效的 I/O 处理模型来应对更高的并发量。原创 2024-04-29 14:58:11 · 321 阅读 · 0 评论 -
HashMap怎么解决hash冲突
哈希算法被计算的数据是无限的,而计算后的结果范围有限,所以总会存在不同的数据经过计算后得到的值相同,这就是哈希冲突。原创 2024-04-25 18:57:53 · 433 阅读 · 0 评论 -
HashMap 和 HashTable的异同
当我们第一次创建 HashMap 的时候,就会指定其容量(如果未明确指定,默认是 16),随着我们不断的向 HashMap 中 put 元素的时候,就有可能会超过其容量,那么就需要有一个扩容机制。所谓扩容,就是扩大 HashMap 的容量,在向 HashMap中添加元素过程中,如果 元素个数(size)超过临界值(threshold)的时候,就会进行自动扩容(resize),并且,在扩容之后,还需要对 HashMap 中原有元素进行rehash,即将原来桶中的元素重新分配到新的桶中。线程安全的,效率低;原创 2024-04-25 18:50:14 · 242 阅读 · 1 评论 -
Java foreach 循环陷阱
为什么阿里的 Java 开发手册里会强制不要在 foreach 里进行元素的删除操作?list.add("王二");list.add("王三");list.add("有趣的程序员");if ("王二".equals(str)) {remove 的时候触发执行了方法,该方法对 modCount 和 expectedModCount 进行了比较,发现两者不等,就抛出了异常。list.add("王二");list.add("王三");list.add("有趣的程序员");原创 2024-02-26 17:41:33 · 717 阅读 · 0 评论 -
java学习网站
学习网址:https://www.bilibili.com/video/BV1fh411y7R8/?网址:https://www.bilibili.com/video/BV1Kb411W75N?学习网址:http://www.w3schools.cn/java/default.asp。力扣:https://leetcode-cn.com/problemset/all/原创 2024-02-21 17:02:05 · 222 阅读 · 0 评论 -
java 常用 jar 包
谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来。jackson一直很主流,社区和文档支持也很充足,但有人还是嫌它不够快,不够简洁,于是便有了fastjson,看名字就知道它的主要特点就是快,可能在功能和其他支持方面不能和jackson媲美,但天下武功,唯快不破,这就决定了fastjson有了一定的市场。10 json-lib,算是很早的转换工具了,用的人很多,说实在现在完全不适合了,缺点比较多,依赖的第三方实在是比较多,效率低下,API也比较繁琐,说他纯粹是因为以前的老项目很多人都用到它。原创 2023-09-04 17:40:15 · 1962 阅读 · 0 评论 -
JAVA#volatile
volatile是JAVA虚拟机提供的轻量级的同步机制volatile字面意思是易变的、不稳定的。原创 2023-08-12 17:13:51 · 197 阅读 · 0 评论 -
java#CAS
CAS 称 自旋锁,无锁, 比较并换,不用加锁也能保证原子性CAS 的全称 为 Compare-And-Swap 它是一条CPU并发原语它的功能是判断内存某个位置的值是 否为预期值,如果是则更改为新的值,这个过程是原子。原创 2023-08-12 16:07:10 · 165 阅读 · 0 评论 -
Java #ArrayList#LinkedList
ArrayList解释为,数组(array)集合ArrayList 底层是基于数组实现的,ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素,ArrayList 默认初始化大小DEFAULT_CAPACITY = 10,存在容器初始化大小LinkedList解释为,链表(linked)集合LinkedList 底层是基于链表实现的,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。原创 2023-08-12 10:56:05 · 150 阅读 · 0 评论 -
java class 属性 null 给个默认值
//本方法只是参考public static void setFieldNotNull(Object obj) throws Exception { getField(obj.getClass(), obj);}private static void getField(Class<?> clazz, Object obj) throws IllegalAccessException, NoSuchMethodException, InvocationTargetExcepti.原创 2021-12-15 16:27:45 · 1937 阅读 · 0 评论 -
ConcurrentLinkedQueue
ConcurrentLinkedQueue 使用1 HashMap.cs 类定义ConcurrentHashMappublic static ConcurrentHashMap<String,ConcurrentLinkedQueue<String>> qMap = new ConcurrentHashMap<>();2 实列化ConcurrentLinkedQueue<String> dateList = HashMap(类).qMap.co.原创 2021-09-10 09:30:28 · 406 阅读 · 0 评论 -
Vector、ArrayList和LinkedList有什么区别
1.基本区别:三个类都实现了List接口,都是有序集合,数据是允许重复的;ArrayList 和Vector都是基于数组实现存储的,集合中的元素的位置都是有顺序即连续的;LinkedList是基于双向链表实现存储的,集合中的元素的位置是不连续的2.性能区别:Vector和ArrayList底层实现原理一致,但是Vector是线程安全的,因此性能比ArrayList差很多;LinkedList相比于集合Vector和ArrayList在插入,修改,删除等操作上速度较快,但是随机访问的性能较差3.安全区原创 2021-01-22 11:11:29 · 2296 阅读 · 1 评论 -
java 基础面试题
共包含 208 道面试题,主要用于学习Java 基础1. JDK 和 JRE 有什么区别?JRE是Java Runtime Environment的缩写,顾名思义是java运行时环境,包含了java虚拟机,java基础类库。Jdk是Java Development Kit的缩写,顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的2. == 和 equals 的区别是什么?== :它的作用是判断两个对象的地址...原创 2021-01-18 15:25:16 · 357 阅读 · 1 评论 -
try-catch-finally
HashMapHashMap基于散列桶(数组和链表)实现;TreeMap基于红黑树实现。HashMap不支持排序;TreeMap默认是按照Key值升序排序的,可指定排序的比较器,主要用于存入元素时对元素进行自动排序。HashMap大多数情况下有更好的性能,尤其是读数据。在没有排序要求的情况下,使用HashMap。...原创 2021-01-12 15:59:11 · 129 阅读 · 0 评论 -
session
session概念 session概念:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。说白了session就是一种可以维持服务器端的数据存储技术 Session是服务器端的一个集合,可以存储任何东西。session最重要的特性,是可以识别客户session主要有以下的这些特点:1. session保存的位置是在服务器端2. session一般来说是要配合cookie使用,如果是浏览器禁用了cookie功能...原创 2021-01-12 14:29:56 · 231 阅读 · 0 评论 -
Throw和Throws的区别
类别 synchronized Lock 存在的层次 Java关键字 在JVM层面上 是一个类 锁的释放 1以获取锁的线程执行完同步代码,释放锁 2线程执行发生产异常,jvm会让线程释放锁 在finally中必须释放锁,不然容易造存线程死锁发生异常 锁的获取 假设A线程获取锁,B线...原创 2021-01-12 14:17:19 · 10109 阅读 · 0 评论 -
session 和 cookie 有什么区别
session 和 cookie 有什么区别? 区别 session cookie 存储位置 存端浏览器 存放在服务器 存储容量 单个4kb,最多存20个 没有上限 存储方式 只能保管ASCII字符串 存储任何类型 隐私策略不同原创 2021-01-12 11:23:20 · 76 阅读 · 0 评论 -
BIO、NIO、AIO 有什么区别
介绍BIO(同步阻塞) 就是传统的java.io包,它是基于流模型实现的,交互的方式是同步、阻塞方式,也就是说在读入输入流或者输出流时,在读写动作完成之前,线程会一直阻塞在那里,它们之间的调用时可靠的线性顺序。它的有点就是代码比较简单、直观;缺点就是 IO 的效率和扩展性很低,容易成为应用性能瓶颈。 NIO(同步非阻塞) 是 Java 1.4 引入的 java.nio 包,提供了 Channel、Selector、Buffer 等新的抽象,可以构建多路复用的、同步非阻塞IO 程序,同时提供了更接...原创 2021-01-11 14:37:26 · 115 阅读 · 0 评论 -
final finally finalize()区别
final 表示最终的、不可改变的。用于修饰类、方法和变量。 finally 异常处理的一部分,它只能用在try/catch语句中,表示希望finally语句块中的代码最后一定被执行(但是不一定会被执行) finalize()是在java.lang.Object里定义的,Object的finalize方法什么都不做,对象被回收时finalized方法会被调用。 特殊情况下,可重写finalize方法,当对象被回收的时候释放一些资源。但注意,要调用super.finalize()。...原创 2021-01-11 11:09:53 · 85 阅读 · 0 评论 -
synchronized 和 Lock 有什么区别
synchronizedsynchronized的底层原理是怎样的?synchronized通过monitor和mutex lock实现了互斥synchronized是通过对象内部的一个叫做监视器(monitor)来实现的监视器内有个组件是计数器,默认值为0,当计数器为0,尝试加锁,加锁成功,计数器加1其他线程发现计数器不为0,加锁失败进入阻塞synchronized也实现了可重入的功能监视器锁本质是依赖于底层的操作系统的Mutex Lock是互斥锁来实现的Mutex Loc原创 2021-01-11 09:48:54 · 165 阅读 · 0 评论 -
HashMap
为什么用HashMap?HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含一个key-value键值对HashMap是一个散列桶(数组和链表),它存储的内容是键值对(key-value)映射HashMap采用了数组和链表的数据结构,能在查询和修改方便继承了数组的线性查找和链表的寻址修改HashMap是非synchronized,所以HashMap很快HashMap可以接受null键和值,而Hashtable则不能(原因就是equlas()方法需要原创 2021-01-08 10:49:50 · 102 阅读 · 1 评论 -
List、Set、Map 之间的区别
Collection框架关系图如下三者之间的区别如下:1) 元素重复性:① List允许有重复的元素。任何数量的重复元素都可以在不影响现有重复元素的值及其索引的情况下插入到List集合中;② Set集合不允许元素重复。Set以及所有实现了Set接口的类都不允许重复值的插入,若多次插入同一个元素时,在该集合中只显示一个;③ Map以键值对的形式对元素进行存储。Map不允许有重复键,但允许有不同键对应的重复的值;2) 元素的有序性:① List及其所有实现类保持了每个元素的插入顺原创 2021-01-08 10:12:52 · 734 阅读 · 0 评论 -
Java常见官网
Javahttps://www.oracle.com/java/technologies/OpenJDKhttps://openjdk.java.net/w3c(万维网联盟)https://www.w3.org/apache(开源项目非盈利组织)https://www.apache.org/Oraclehttps://www.oracle.com/index.htmlMySQLhttps://www.mysql.com/mongoDB(分布式文件存储的数据库)https://www.转载 2021-01-07 17:11:00 · 35890 阅读 · 0 评论 -
synchronized和ReenTrantLock 的区别
synchronized 早期的实现比较低效,对比 ReentrantLock,大多数场景性能都相差较大,但是在 Java 6 中对 synchronized 进行了非常多的改进。主要区别如下:ReentrantLock 使用起来比较灵活,但是必须有释放锁的配合动作;ReentrantLock 必须手动获取与释放锁,而 synchronized 不需要手动释放和开启锁;ReentrantLock 只适用于代码块锁,而 synchronized 可用于修饰方法、代码块等。Reentrant原创 2021-01-07 14:24:45 · 306 阅读 · 0 评论 -
String 和 StringBuffer、StringBuilder 的区别
可变性简单的来说:String 类中使用 final 关键字修饰字符数组来保存字符串,private final char value[],所以 String 对象是不可变的。而StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使用字符数组保存字符串char[]value但是没有用 final 关键字修饰,所以这两种对象都是可变的。StringBuilder 与 StringBu.原创 2021-01-07 13:42:59 · 157 阅读 · 0 评论 -
centos 部署jar包
方式一:java -jar NettyAPI.jar前台运行,当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出。方式二(建议使用这个):java -jar NettyAPI.jar &&代表在后台运行,当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。方式三:nohup java -jar NettyAPI.jar &nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行,当用 n...原创 2020-10-20 18:16:12 · 1244 阅读 · 0 评论 -
java IDEA 打包发布
IDEA打包流程1配置maven<properties> <maven-source-plugin.version>3.0.1</maven-source-plugin.version> <output.jar.directory>${project.build.directory}/build</output.jar.directory> <maven-jar-plugin.version>3.2..原创 2020-10-20 09:46:53 · 1665 阅读 · 0 评论 -
Netty异步和事件驱动
Netty简介 netty是一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端。原创 2020-08-28 09:16:41 · 156 阅读 · 0 评论 -
jdk版本之间差异
Java 52004 年 Sun 公司发布J2SE5(没错,Sun 公司又改名字了),版本代号 Tiger,这个版本的 Java 语言新功能如下: 1、泛型。 2、Metadata,元数据,描述数据的数据。 3、自动装箱和拆箱,也就是基本数据类型(如 int)和它的包装类型(如 Integer)自动帮你转换(其实背后是相关的方法帮你做了转换工作)。 4、枚举。 5、可变参数,一个函数可以传入数量不固定的参数值。 6、增强版的 for 循环。 .原创 2020-08-24 09:15:48 · 1292 阅读 · 0 评论 -
Semaphore
概念 Semaphore是java并发包里面的一个工具类,我们限制可以访问某些资源的线程数目就可以使用Semaphore了 Semaphore:可理解为允许线程执行信号的池子,池子中放入多少个信号就允许多少线程同时执行。 Semaphore的作用:限制线程并发的数量注意:的是 Semaphore 只是对资源并发访问的线程数进行监控,并不会保证线程安全Semaphore使用方法Semaphore(int permits)创建具有给定的许可数和非公平的公平设置的 Semap...原创 2020-08-19 16:32:38 · 107 阅读 · 0 评论 -
Fork/Join 框架
Fork/Join框架介绍 Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结 果后得到大任务结果的框架。Fork/Join框架要完成两件事情: 1.任务分割:首先Fork/Join框架需要把大的任务分割成足够小的子任务,如果子任务比较大的话还要对子任务进行继续分割 2.执行任务并合并结果:分割的子任务分别放到双端队列里,然后几个启动线程分别从双端队列里获取任务执行。子任务执行 ...原创 2020-08-17 14:47:43 · 95 阅读 · 0 评论 -
Java 中的阻塞队列
一.什么是阻塞队列?阻塞队列是一个在队列基础上又支持了两个附加操作的队列。这两个附加的操作支持阻塞和插入和移除方法。支持阻塞的插入方法:队列满时,队列会阻塞插入元素的线程,直到队列不满。 支持阻塞的移除方法:队列空时,获取元素的线程会等待队列变为非空。二.阻塞队列的应用场景阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里取元素的线程。简而言之,阻塞队列是生产者用来存放元素、消费者获取元素的容器。...原创 2020-08-17 10:12:11 · 87 阅读 · 0 评论 -
ConcurrentHashMap的实现原理与使用
ConcurrentHashMap是线程安全且高效的HashMap。为什么要使用ConcurrentHashMap?1线程不安全的HashMap(在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%)2效率低下的HashTable(HashTable)...原创 2020-08-14 11:05:55 · 329 阅读 · 0 评论 -
Condition接口
Condition介绍Condition接口也提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式,但是这两者在使用方式以及功能特性上还是有差别的。Object上的监视器只有一个等待队列,但是Condition上可以有多个等待队列Condition是对象监视器的替代品,拓展了监视器的语义Condition类的方法方法 说明 public void await() 使当前线程等待,直到发出信号或中断信号。 public boolean await(.原创 2020-08-13 19:26:32 · 172 阅读 · 0 评论 -
LockSupport
LockSupport 当需要阻塞或唤醒一个线程的时候,都会使用LockSupport工具类来完成相应 工作。LockSupport定义了一组的公共静态方法,这些方法提供了最基本的线程阻塞和唤醒功 能,而LockSupport也成为构建同步组件的基础工具。LockSupport 是用来创建锁和其他同步类的基本线程阻塞原语LockSupport方法介绍 方法 说明 void park() 阻塞当前线程,如果调用unpark方法或者当前线程被中...原创 2020-08-13 18:12:39 · 86 阅读 · 0 评论