
笔记
文章平均质量分 55
@逾越
记录日常学习实验
展开
-
函数式编程——Stream流
java8的Stream使用的是函数式编程模式,如同它的名字一样,它可以被用来对集合或者数组进行链状流式操作。可以方便的让我们的对集合或者数组操作;一定需要有终结操作数组:Arrays.stream(数组)或者使用Stream.of创建双列集合:转换成单列集合后再创建2.中间操作filter:可以对流中的元素进行过滤,符合条件的才保留;map:将流中的元素进行计算或者转换distinct :可以去除流中的重复元素 依赖的式object的equals方法来判断是否是相原创 2022-06-29 17:07:01 · 14132 阅读 · 0 评论 -
Java线程池(面试)
线程池的优点线程池提供了一种限制和管理资源(包括执行一个任务)。 每个线程池还维护一些基本统计信息,例如已完成任务的数量。这里借用《Java 并发编程的艺术》提到的来说一下使用线程池的好处:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。Executor 框架通过原创 2022-03-04 20:14:55 · 13000 阅读 · 1 评论 -
常见Linux命令
Linux 脚本指令cd / 打开根目录ls 查看目录ll 查看详情蓝色 文件夹浅蓝色 目录红色 压缩包绿色 可执行文件彩色 多媒体文件mkdir 创建文件夹rz 上传文件ctrl +c 中断恢复rm -rf 文件名 彻底删除文件unzip +包名 解压包Tap键 根据某个字母检索联想sh 运行某个可执行文件cd …返回上一级vi 文件 进入某一文件mv 修改文件名pwd 显示当前绝对路径top 检查所有进程ps -ef 查看所有进程详细目录原创 2022-03-04 19:51:56 · 12868 阅读 · 0 评论 -
(修改后)Java中的String类占用多大的内存空间?
空String占用的空间40对象头(8 字节)+ 引用 (4 字节 ) + char 数组(16 字节)+ 1个 int(4字节)+ 1个long(8字节)= 40 字节非空String占用的空间40 + 2 * n (代表字符串长度)char[]数组中的一个char类型的数据占用2个字节的空间,所以,只是String中的数据就会占用 2 * n(n为字符串的长度)个字节的空间,再加上空字符串所占用的40个字节空间,最终得出一个字符串所占用的存储空间为: 40 + 2 * n (n为字符串长度原创 2022-02-18 09:41:28 · 15342 阅读 · 4 评论 -
Java基础回顾(面试)
八种基本类型long 8字节 int 4字节 short 2 字节 byte 1 字节boolean 4字节 double 8字节 float 4字节char (根据编码 ASCII 码 1字节 Unicode 2字节 )根据八种基本类型引出 float和int 的精度问题越近0精度越高(大于int) 离0越远精度低 (低与int)根据int引出128陷阱-127 ------ 128 如数字没超过这个范围存在同一个对象中,超过那么就要重新创建一个对象(新开辟一个空间).原创 2022-02-13 14:30:11 · 11473 阅读 · 0 评论 -
HashMap和ConcurrentHashMap和Hashtable的区别
HashMap和Hashtable的区别1.线程安全不同HashMap是非线程安全的,只是用于单线程环境下;ConcurrentHashMap是线程安全的,多线程环境下可用;Hashtable是线程安全的,能用于多线程环境中;2.继承的父类不同HashMap继承自AbstractMap类。但二者都实现了Map接口。Hashtable继承自Dictionary类,Dictionary类是一个已经被废弃的类(见其源码中的注释)。父类都被废弃,自然而然也没人用它的子类Hashtable了。原创 2022-02-13 08:52:44 · 15994 阅读 · 0 评论 -
Condition和 AQS 原理
Condition简介任何一个java对象都天然继承于Object类,在线程间实现通信的往往会应用到Object的几个方法,比如wait(),wait(long timeout),wait(long timeout, int nanos)与notify(),notifyAll()几个方法实现等待/通知机制,同样的, 在java Lock体系下依然会有同样的方法实现等待/通知机制。从整体上来看Object的wait和notify/notify是与对象监视器配合完成线程间的等待/通知机制,而Condition原创 2022-02-12 22:40:58 · 7681 阅读 · 0 评论 -
关于ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)
原创 2022-02-12 22:01:36 · 7354 阅读 · 0 评论 -
Volatile和Synchronized和Lock
java内存模型线程之间的通信机制有两种:共享内存和消息传递Java的并发采用的是共享内存模型线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存(不是真实存在的)JMM通过控制主内存与每个线程的本地内存之间的交互,来为Java程序员提供内存可见性保证volatile对线程的内存可见性 是指必须刷新到主内存中,并声明本地内存中的无效1)每个线程都有自己的本地内存空间(java栈中的帧)。线程执行时,先把变量从内存读到线程自己的本地内存空间,然后对变量进行操作。(2)对该变量操原创 2022-02-11 23:32:46 · 7838 阅读 · 0 评论 -
双重检查锁定及单例模式
public class Singleton { private static Singleton instance; private Singleton (){} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance;原创 2022-02-11 23:03:30 · 8440 阅读 · 0 评论 -
基于Condition实现阻塞队列
public class BoundedQueue { private Object[] items; // 添加的下标,删除的下标和数组当前数量 private int addIndex, removeIndex, count; private Lock lock = new ReentrantLock(); private Condition notEmpty = lock.newCondition(); private Condition notFull = lock.newCondition();原创 2022-02-11 10:16:07 · 7147 阅读 · 0 评论 -
并发——锁升级(偏向锁,轻量级锁,重量级锁,及常见锁)
锁升级原因:为了减少获得锁和释放锁带来的性能消耗,所以有了升级锁流程:无锁状态—偏向锁(jvm配置是否开启)----轻量级锁----重量级锁(不可逆,只要成为重量级,释放锁就一直是重量级)常见锁偏向锁:首先进入的线程,就被标记为偏向锁。如果有其他线程竞争。偏向锁就会升级为轻量级锁轻量级锁:等待的进程不进入阻塞队列,自旋状态(消耗cpu,实现就是CAS),一直在查看是否有空位。当线程激烈(自旋线程多)就会升级为重量级锁 速度快,但消耗大重量级锁:等待的进程进入阻塞队列,通知有空位,出阻塞队列争原创 2022-02-09 21:28:03 · 7348 阅读 · 0 评论 -
线程与进程的区别?
进程和线程的区别是什么?进程是操作系统分配资源的单位线程是调度的基本单位,线程之间共享进程资源,线程是程序执行的最小单位一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线调度和切换:线程上下文切换比进程上下文切换要快得多进程定义:进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程一般由程序,数据集合和进程控制块三部分组成。程序用于描述进程要完成的功能,是控制进程执行的指令集;数据集合是原创 2022-02-09 21:16:35 · 7352 阅读 · 0 评论 -
面试题——迭代器使用
面试官问:现在给你几十万条数据存在ArrayList 中,从中删除叫李华的人;你如何操作做?答:使用迭代器Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。根据 ArrayList创建的对象sites// 获取迭代器 Iterator it = sites.iterator(); ArrayList<String> sites = new ArrayList<String>();原创 2022-01-27 20:38:20 · 5685 阅读 · 2 评论 -
面试题—— MySQL一张表到底能存多少数据?
MySQL一张表最多能存多少数据?MySQL本身并没有对单表最大记录数进行限制,这个数值取决于你的操作系统对单个文件的限制本身。业界流传是500万行。超过500万行就要考虑分表分库了。阿里巴巴《Java开发手册》提出单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。事实上,MySql数据库一张表中能存储的最大数据量和实际记录的条数无关,而与 MySQL 的配置以及机器的硬件有关。因为,MySQL 为了提高性能,会将表的索引装载到内存中。**InnoDB buffer size 足够原创 2022-01-27 20:27:24 · 9531 阅读 · 0 评论 -
Tomact运行流程
首先找到启动的主方法?1.在Tomact的bin目录下的startup.sh分析可知 主方法在catalina.sh中(包含bootstrap)2.扫描webapps,遍历Java文件,拿到所有.class文件的路径3.通过class.forName进行反射 ,通过注解把servlet挑出来,获取注解值4.静态的全局变量HashMap 注解值(servlet路径)作为key newinstance获取的对象作为value5.读取server.xml 通过dom操作读取端口8080,原创 2022-01-27 11:31:05 · 5534 阅读 · 0 评论 -
Redis缓存异常(缓存雪崩,缓存穿透,缓存击穿,缓存降级)
缓存雪崩缓存雪崩是指缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。解决方案缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。一般并发量不是特别多的时候,使用最多的解决方案是加锁排队。给每一个缓存数据增加相应的缓存标记,记录缓存的是否失效,如果缓存标记失效,则更新数据缓存。缓存穿透缓存穿透是指缓存和数据库中都没有的数据,导致所有的请求都落到数据库上,造成数据库短时间内承受大量请求而崩掉。解决方案接口层增加校验,如用户鉴权校原创 2022-01-26 10:13:10 · 5254 阅读 · 0 评论 -
HashMap底层探究(二)
HashMap的put方法的具体流程?当我们put的时候 首先计算 key的hash值,这里调用了 hash方法,hash方法实际是让key.hashCode()与key.hashCode()>>>16进行异或操作,高16bit补0,一个数和0异或不变,所以 hash 函数大概的作用就是:高16bit不变,低16bit和高16bit做了一个异或,目的是减少碰撞。因为bucket数组大小是2的幂,计算下标index = (table.length - 1) & hash,如果不做原创 2022-01-18 16:31:16 · 4953 阅读 · 0 评论 -
HashMap底层探究(一)
1.HashMap 实现原理HashMap 基于 Hash 算法实现的当我们往Hashmap中put元素时,利用key的hashCode重新hash计算出当前对象的元素在数组中的下标存储时,如果出现hash值相同的key,此时有两种情况。(1)如果key相同,则覆盖原始值;(2)如果key不同(出现冲突),则将当前的key-value放入链表中获取时,直接找到hash值对应的下标,在进一步判断key是否相同,从而找到对应值。理解了以上过程就不难明白HashMap是如何解决hash冲突的问题,核心原创 2022-01-18 16:19:02 · 5108 阅读 · 0 评论 -
List 和 Set 的区别
List 和 Set 的区别List , Set 都是继承自Collection 接口List 特点:一个有序(元素存入集合的顺序和取出的顺序一致)容器,元素可以重复,可以插入多个null元素,元素都有索引。常用的实现类有 ArrayList、LinkedList 和 Vector。Set 特点:一个无序(存入和取出顺序有可能不一致)容器,不可以存储重复元素,只允许存入一个null元素,必须保证元素唯一性。Set 接口常用实现类是 HashSet、LinkedHashSet 以及 TreeSet。另原创 2022-01-18 10:02:15 · 7725 阅读 · 0 评论 -
ArrayList 和 LinkedList 的区别是什么?
ArrayList 和 LinkedList 的区别是什么?数据结构实现:ArrayList 是动态数组的数据结构实现,而 LinkedList 是双向链表的数据结构实现。随机访问效率:ArrayList 比 LinkedList 在随机访问的时候效率要高,因为 LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找增加和删除效率:在非首尾的增加和删除操作,LinkedList 要比 ArrayList 效率要高,因为 ArrayList增删操作要影响数组内的其他数据的原创 2022-01-18 10:01:25 · 6632 阅读 · 0 评论 -
抽象类和接口的联系和区别
相同点接口和抽象类都不能实例化都位于继承的顶端,用于被其他实现或继承都包含抽象方法,其子类都必须覆写这些抽象方法不同点原创 2022-01-15 20:49:16 · 4557 阅读 · 0 评论 -
Java初始化大乱斗
1.先了解static归类所有,只初始化一次,并且当类加载的时候才开始初始化修饰变量 所有该类的对象共享一个静态变量修饰方法 直接用类名调用即可能不能在main方法内写static int a =3;? 不能2.大乱斗(了解这道题,即明白Java初始化)public class InitializeDemo { private static int k = 1; private static InitializeDemo t1 = new InitializeDemo("t1原创 2022-01-15 19:18:26 · 4569 阅读 · 0 评论 -
String类型不可变(源码分析)
1.先了解final功能关键字 final 表示这个变量只能被赋值一次。一旦被赋值之后,就不能够再更改了。当使用final修饰方法时,这个方法将成为最终方法,无法被子类重写防止指令重排序,保证线程可见性(面试点)当用final修饰类时,该类成为最终类,无法被继承final一般修饰基本类型,复杂对象控不住,例如数组,修饰后还是可以更改某个值。本质就是固定一个地址不能改变。2.为什说字符串是不可变的final修饰的char数组——》不指向新的数组final修饰String类,不能被其他人继原创 2022-01-15 11:54:57 · 4560 阅读 · 0 评论 -
128陷阱
Integer包装类: 将int变成对象 类型之间的转化,数据类型之间的基本操作(自己写工作量大)-127 ------ 128 如数字没超过这个范围存在同一个对象中,超过那么就要重新创建一个对象(新开辟一个空间)源码分析: public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) //判断是否大于小的 小于大的 //满足原创 2022-01-15 11:02:34 · 4427 阅读 · 0 评论 -
Java中boolean类型占用多少个字节
1、1个bit理由是boolean类型的值只有true和false两种逻辑值,在编译后会使用1和0来表示,这两个数在内存中只需要1位(bit)即可存储,位是计算机最小的存储单位。2、1个字节理由是虽然编译后1和0只需占用1位空间,但计算机处理数据的最小单位是1个字节,1个字节等于8位,实际存储的空间是:用1个字节的最低位存储,其他7位用0填补,如果值是true的话则存储的二进制为:0000 0001,如果是false的话则存储的二进制为:0000 0000。3、4个字节理由来源是《Java虚拟机规原创 2022-01-15 08:22:23 · 4729 阅读 · 0 评论 -
Elasticsearch学习心得及常见问题
目录1.Elasticsearch和elasticsearch-headr跨域问题2.Elasticsearch的插件ik分词器3.ElasticSearch的核心概念1.分片2.倒排索引(重点,数据库可能会问)3.基本Rest命令说明4.Spring boot集成ElasticSearch1.Elasticsearch和elasticsearch-headr跨域问题首先保证两者启动成功然后需要在elasticsearch的config中找到elasticsearch的配置文件添加两原创 2022-01-12 15:00:08 · 5459 阅读 · 0 评论 -
Redis持久化和一主二从三哨兵
文章目录1.Redis有哪些优缺点2.持久化1.什么是Redis持久化?2.Redis 的持久化机制是什么?各自的优缺点?1.RDB:是Redis DataBase缩写快照2.AOF:持久化3.优缺点是什么?3.哨兵模式(一主二从三哨兵)1.一主二从2.哨兵模式1.Redis有哪些优缺点优点读写性能优异。 支持数据持久化,支持AOF和RDB两种持久化方式。支持事务,Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。数据结构丰富,除了支持string类型的valu原创 2022-01-06 15:31:36 · 4094 阅读 · 0 评论 -
TCP的三次握手和四次挥手
目录1.TCP的定义2.三次握手3.为什么TCP连接的时候是3次?2次不可以吗?1.TCP的定义TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服务端保存的一份关于对方的信息,如ip地址、端口号等。TCP可以看成是一种字节流,它会处理IP层或以下的层的丢包、重复以及错误问题。在连接的建立过程中,双方需要交换一些连接的参数。这些参数可以放在TCP头部。一个TCP连接由一个4元组构成,分别是两个IP地址和原创 2022-01-05 13:31:04 · 4787 阅读 · 0 评论 -
浅析StringBuffer和StringBuilder
目录1.StringBuffer 和 StringBuilder 的类结构2.区别1.线程安全问题2.缓冲区问题3.性能问题4.使用场景1.StringBuffer 和 StringBuilder 的类结构继承了一个抽象的字符串父类:AbstractStringBuilder2.区别1.线程安全问题StringBuffer:线程安全StringBuilder:线程不安全2.缓冲区问题StringBuffer 每次获取 toString 都会直接使用缓存区的 toStringCache原创 2022-01-03 12:33:05 · 3929 阅读 · 0 评论 -
关于Java关键字 final/finally/finalize分析
文章目录1.final2 .finally3.finalize1.final特点:关键字 final 表示这个变量只能被赋值一次。一旦被赋值之后,就不能够再更改了。当使用final修饰方法时,这个方法将成为最终方法,无法被子类重写防止指令重排序,保证线程可见性(面试点)当用final修饰类时,该类成为最终类,无法被继承final一般修饰基本类型,复杂对象控不住,例如数组,修饰后还是可以更改某个值。本质就是固定一个地址不能改变。2 .finallyJava 中的 Fi原创 2022-01-03 12:19:59 · 4163 阅读 · 0 评论 -
网络编程
网络编程IPabcd地址分类 0-255对半分如何查看IP,查看java帮助文档 中该类。端口通信协议原创 2021-12-18 17:26:10 · 3692 阅读 · 0 评论 -
PBP/OBP/OOP的特征
PBP/OBP/OOP的特征PBP(基于过程):函数、域与生命周期的概念、函数重载、函数模板、异常处理、范型算法。OBP(基于对象):类(接口)、类的生命周期、类模板。OOP(面向对象):继承、多态。三个概念步步深入,后者包括前者。其目的是实现软件开发的可重用性,解决软件危机(软件工程思想未引入之前)。OOP不可避免设计原则的发展与设计模式的产生,这是OOP独具的特征决定的(正如前面所说,特征的产生是由其产生目的决定的)。OOP的方法论(高内聚、低耦合、易复用)OOP的方法论--如何实现基于O原创 2021-12-18 17:24:14 · 5181 阅读 · 0 评论 -
web环境配置及常用依赖
web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/j原创 2021-12-18 17:23:00 · 3991 阅读 · 0 评论