工作学习
文章平均质量分 86
DY_浅陌初心
从今天起,过好每天一天
展开
-
Java---HashMap工作原理和实现
1.概述http://yikun.github.io/2015/04/01/Java-HashMap%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E5%8F%8A%E5%AE%9E%E7%8E%B0/1.1官方介绍Hash table basedimplementation of the Map interface. This implementation provides all of the optional map operations, and permits.原创 2021-06-21 15:31:22 · 187 阅读 · 0 评论 -
Java---String
1.String介绍String 位于java.lang包下,作为Java的核心类提供了很多字符串处理方法,例如,比较,替换,截取等等。以下是部分源码:public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private fin...原创 2021-06-17 11:12:07 · 206 阅读 · 0 评论 -
Java---并发容器之ConcurrentLinkedQueue
一.概述ConcurrentLinkedQueue是一个基于连接节点的无界线程安全队列(java并没有提供构造方法来指定队列的大小,因此它是无界的)。该队列的元素遵循先进先出的原则。头是最先加入的,尾是最近加入的,该队列不允许null元素。为了提高并发量,它通过使用更细的锁机制,使得在多线程环境中只对部分数据进行锁定,从而提高运行效率,通常ConcurrentLikedQueue性能好于BlockingQueue。二.结构ConcurrentLinkedQueue内部持有2个节点:head头结点原创 2021-02-23 14:58:44 · 458 阅读 · 2 评论 -
Java---并发容器之BlockingQueue(阻塞队列)
一.概述阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。二.方法 抛出异常 特殊值 阻塞 超时 插入 add(e) offer(e) put(e) offe.原创 2021-02-23 11:26:23 · 182 阅读 · 1 评论 -
Java---并发容器之CopyOnWriteArrayList
一.概述ArrayList并不是线程安全的,在读线程在读取ArrayList的时候如果有写线程在写数据的时候,基于fast-fail机制(),会抛出ConcurrentModificationException异常,也就是说ArrayList并不是一个线程安全的容器,当然可以用Vector,或者使用Collections的静态方法将ArrayList包装成一个线程安全的类,但是这些方式都是采用Java关键字synchronzied对方法进行修饰,利用独占式锁来保证线程安全的。但是,由于独占式锁在同一时刻原创 2021-02-22 15:06:00 · 178 阅读 · 0 评论 -
Java---并发容器之ConcurrentHashMap
一.概述HashMap线程不安全,而Hashtable是线程安全,但是它使用了synchronized进行方法同步,插入、读取数据都使用了synchronized,当插入数据的时候不能进行读取(相当于把整个Hashtable都锁住了,全表锁),当多线程并发的情况下,都要竞争同一把锁,导致效率极其低下。而在JDK1.5后为了改进Hashtable的痛点,ConcurrentHashMap应运而生。ConcurrentHashMap不支持null键和null值,当存在null时,会报空指针异常!!!(因原创 2021-02-22 14:10:19 · 206 阅读 · 0 评论 -
Java---Semaphore
一.概念Semaphore(信号量)可以用来控制同时访问特定资源的线程数量,常用于限流场景。Semaphore支持公平锁和非公平锁。Semaphore接收一个int整型值,表示许可证数量,如果许可证剩余数量大于零时,线程则允许访问该共享资源;如果许可证剩余数量为零时,则拒绝线程访问该共享资源。 Semaphore所维护的许可证数量就是允许访问共享资源的最大线程数量。 所以,线程想要访问共享资源必须从Semaphore中获取到许可证。二.原理Semaphore内部主要通过AQS(Abstr..原创 2021-02-20 15:57:09 · 109 阅读 · 0 评论 -
Java---ReentrantReadWriteLock
一.概述ReentrantReadWriteLock是在AQS的基础上实现的一个可重入锁。该锁具备重入锁的可重入性、可中断获取锁等特征,但是与ReentrantLock不一样的是,它的内部维护了一把读锁和一把写锁,读锁是共享锁,写锁是排他锁。这样就保证了写数据时的线程安全性,又保证了读数据时的多线程并发,比较适合读取数据较多而写数据较少的并发场景。写锁是独占的,写时不能有其他线程写也不能读;所有的独锁都释放完之前也不能加写锁。ReentrantReadWriteLock实现了ReadWriteLoc原创 2021-02-20 14:43:06 · 178 阅读 · 0 评论 -
Java---ReentrantLock
一.AQS1.概述AQS(AbstractQueuedSynchronizer),是抽象队列同步器,其实就是一个用来构建锁和同步器的框架。内部实现的关键是:先进先出的队列、state状态。2.核心思想AQS核心思想是:如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,AQS使用一个voliate int成员变量来表示同步状态,通过内置的FIFO队列来完成获取资源线程的排队工作。AQS使用CAS对该同步状态进行原子操原创 2021-02-19 18:01:29 · 130 阅读 · 0 评论 -
Java---Volatile
一.概述volatile通常被比喻成"轻量级的synchronized",也是Java并发编程中比较重要的一个关键字。和synchronized不同,volatile是一个变量修饰符,只能用来修饰变量,无法修饰方法及代码块等。二.Java内存模型JMM线程之间的共享变量存储在主内存(共享内存)中,主内存中的变量,不能直接进行读取和修改的,因此每个线程都有一个私有的本地内存,用于存储主内存变量的副本,当线程对主内存进行读取和修改时,首先将主内存中的变量拷贝到本地内存中,在本地内存中读取和修改,原创 2021-02-18 16:59:18 · 139 阅读 · 3 评论 -
Java---synchronized
一.概述1、synchronized作用原子性:synchronized保证语句块内操作是原子的 可见性:synchronized保证可见性(通过“在执行unlock之前,必须先把此变量同步回主内存”实现) 有序性:synchronized保证有序性(通过“一个变量在同一时刻只允许一条线程对其进行lock操作”)2、synchronized的使用修饰实例方法,对当前实例对象加锁 修饰静态方法,多当前类的Class对象加锁 修饰代码块,对synchronized括号内的对象加锁二.原理原创 2021-02-18 11:21:59 · 342 阅读 · 4 评论 -
Java----joda Time日期时间工具类
1.介绍在JDK1.8之前,处理日期和时间的方式比较单一,Java中提供了Calendar来处理日期,但是过程较为繁琐,但是在JDK1.8之后,Java更新了time包提供了LocalDate,LocalTime,LocalDateTime等日期时间类来处理较为复杂的关于日期和时间的业务逻辑的方法。现有的类(例如java.util.Date和SimpleDateFormatter)是非线程安全的,从而导致用户潜在的并发问题,这不是一般开发人员在编写日期处理代码时会期望处理的问题。joda Tim原创 2021-01-05 15:56:41 · 555 阅读 · 0 评论 -
SpringBoot学习---006---thymeleaf
1.介绍官方文档地址:https://www.thymeleaf.org/https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html2.举例使用(1)引入thymeleaf依赖<dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf</artifactId> <ve原创 2020-12-15 10:22:27 · 135 阅读 · 1 评论 -
SpringBoot学习---005---日志
1.日志框架支持抽象层 日志实现 JCL(Jakarta Commons Logging)、SLF4J(Simple Logging Facade For Java)、jboss-logging Log4j、 JUL、Log4j2 、Logback SpringBoot :底层是spring框架,spring默认是用JCL,SpringBoot是使用的SLF4J+logback方式做日志记录的,在引入其他框架的时候,只需要把这个框架依赖的日志框架爱排除掉,就可以使用了,不需要再引原创 2020-12-15 09:59:27 · 72 阅读 · 1 评论 -
SpringBoot学习---004---Profile
1.多Profile文件在开发过程中,对于不同环境(本地开发环境,测试环境,线上环境),配置可能不同,因此可以创建不同的配置:application-{profile}.yml/properties默认使用的是application.properties配置;2.yml中可以通过文档块来区分3.激活指定的profile1.在配置文件中指定:spring.profiles.active=@filter@2.命令行方式:--spring.profiles.active= 在...原创 2020-12-14 15:08:19 · 97 阅读 · 0 评论 -
SpringBoot学习--002--@SpringBootApplication注解
一.@SpringBootApplication结构@SpringBootApplication包含多个注解,最重要的三个如下:@Configuration @EnableAutoConfiguration @ComponentScan所有我们使用一下三个注解也能启动,但是三个注解过于繁琐,就使用了@SpringBootApplication@Configuration@EnableAutoConfiguration@ComponentScanpublicclass DemoApp原创 2020-12-11 14:25:55 · 133 阅读 · 0 评论 -
SpringBoot学习--001--入门
springBoot入门官方文档地址中文文档地址一.介绍Spring Boot就是可以轻松创建运行的独立的、基于生产级Spring的应用程序,减少了大量的配置。主要的目标是:为所有Spring开发提供一个从根本上更快,且随处可得的入门体验。 开箱即用,但通过不采用默认设置可以快速摆脱这种方式。 提供一系列大型项目常用的非功能性特征,比如:内嵌服务器,安全,指标,健康检测,外部化配置。 绝对没有代码生成,也不需要XML配置。二.基于IDEA快速生成SpringBoot项目1..原创 2020-12-09 15:30:43 · 266 阅读 · 0 评论 -
Linux---查看进程的方式
1.查看进程的方式(1)PS命令:1)ps a 显示现行终端机下的所有程序,包括其他用户的程序.2)ps -A 显示所有程序.3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示.4)ps -e 此参数的效果和指定"A"参数相同.5)ps e 列出程序时,显示每个程序所使用的环境变量.6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系.7)ps -H 显示树状结构,表示程序间的相互关系.8)ps -N 显示所有的程序,原创 2020-09-29 14:07:44 · 1001 阅读 · 0 评论 -
Linux--文件权限问题总结
1.查看文件ls:显示没有隐藏的文件和文件夹 ls -a:显示当前目录下的所有文件和文件夹,包括隐藏的文件 ls -l:显示没有隐藏的文件和文件夹的详细信息 ls -al:显示当前目录下的所有文件和文件夹的详细信息2.文件详细信息解读第1列:代表文件的类型。我们常见的是d和-。d代表是目录文件。-代表是普通文件。其他不常见的有。l代表链接文件,b代表块设备。c代表字符设备文件。 第2-10列:代表该文件的权限。三个为一组。第一组代表文件所有者的权限,第二组代表同用户组的权限,第三组代表原创 2020-09-28 10:43:41 · 570 阅读 · 0 评论 -
Mysql---utf8、utf8mb4、utf8mb4_unicode_ci、utf8mb4_general_ci区别
1.简介MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。最初的 UTF-8 格式使用一至六个字节,最大能编码 31 位字符。最新的 UTF-8 规范只使用一到四个字节,最大能编码21位,正好能够表示所有的 17个 Unicode 平面。 utf8 是 Mysql 中的一种字...原创 2020-07-31 10:04:26 · 2035 阅读 · 0 评论 -
Java---正则表达式
1.介绍正则表达式定义了字符串模式,可以用来搜索、编辑、处理、校对;2.Java中的java.util.regex包java.util.regex 包主要包括以下三个类:2.1 Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(String regex)简单工厂方法创建一个正则表达式;代码示例:Pattern p=Pattern.compile("\\w+"); p.patte原创 2020-07-24 16:19:35 · 232 阅读 · 0 评论 -
RestTemplate----SpringBoot提供的更优雅的方式发送HTTP请求方式
一.HttpClient1.介绍HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本。需要引入两个包:httpclient-4.2.4.jar 和httpcore-4.2.2.jar。2.HttpClientUtils工具类封装,doGet()、doPost()、doPut()、doDelete()定义起来比较繁琐,还要考虑资源回收等问题,代码复杂.原创 2020-07-20 11:18:47 · 170 阅读 · 0 评论 -
Java---反射机制
1.什么是反射?Java的反射就是在运行状态中:对于任意一个类,可以获取类名,包名,类的所有属性和方法; 对于任何一个对象,可以获取所有属性(并且能改变属性)和方法; 判断任意一个对象所属的类 实例化任意一个类的对象...原创 2020-07-16 17:37:53 · 121 阅读 · 0 评论 -
Java业务开发常见错误
1.并发工具类(没有意识到线程重用导致用户信息错乱的 Bug)问题:ThreadLocal 适用于变量在线程间隔离,而在方法或类间共享的场景。如果用户信息的获取比较昂贵(比如从数据库查询用户信息),那么在 ThreadLocal 中缓存数据是比较合适的做法。但,这么做为什么会出现用户信息错乱的 Bug 呢?案例:使用 Spring Boot 创建一个 Web 应用程序,使用 ThreadL...原创 2020-06-18 10:05:55 · 498 阅读 · 0 评论 -
Dubbo
https://juejin.im/post/5d312adb5188253d9b127352https://dubbo.apache.org/zh-cn/docs/user/quick-start.html1.介绍Dubbo是阿里巴巴开源的分布式服务框架,是采用分层方式的框架,使各层之间解耦。致力于提供高性能和透明化的RPC远程服务调用方案,可以像调用本地方法一样调用远程的方法,以及...原创 2020-03-25 09:59:55 · 84 阅读 · 0 评论