自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 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 140

原创 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 179

原创 工作问题总结---SpringBoot 项目启动Unable to Start embedded TomCat

clone下来的项目,启动,报Unable to start embedded Tomcat server,查看网上部分说servlet-api冲突,可能是JDK的问题,但是,本人是因为端口设置8080,被占用了,换一个端口,就能正常启动了.

2021-03-09 15:55:08 765

原创 Java---并发容器之ConcurrentLinkedQueue

一.概述ConcurrentLinkedQueue是一个基于连接节点的无界线程安全队列(java并没有提供构造方法来指定队列的大小,因此它是无界的)。该队列的元素遵循先进先出的原则。头是最先加入的,尾是最近加入的,该队列不允许null元素。为了提高并发量,它通过使用更细的锁机制,使得在多线程环境中只对部分数据进行锁定,从而提高运行效率,通常ConcurrentLikedQueue性能好于BlockingQueue。二.结构ConcurrentLinkedQueue内部持有2个节点:head头结点

2021-02-23 14:58:44 367 2

原创 Java---并发容器之BlockingQueue(阻塞队列)

一.概述阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。二.方法 抛出异常 特殊值 阻塞 超时 插入 add(e) offer(e) put(e) offe.

2021-02-23 11:26:23 133 1

原创 Java---并发容器之CopyOnWriteArrayList

一.概述ArrayList并不是线程安全的,在读线程在读取ArrayList的时候如果有写线程在写数据的时候,基于fast-fail机制(),会抛出ConcurrentModificationException异常,也就是说ArrayList并不是一个线程安全的容器,当然可以用Vector,或者使用Collections的静态方法将ArrayList包装成一个线程安全的类,但是这些方式都是采用Java关键字synchronzied对方法进行修饰,利用独占式锁来保证线程安全的。但是,由于独占式锁在同一时刻

2021-02-22 15:06:00 148

原创 Java---并发容器之ConcurrentHashMap

一.概述HashMap线程不安全,而Hashtable是线程安全,但是它使用了synchronized进行方法同步,插入、读取数据都使用了synchronized,当插入数据的时候不能进行读取(相当于把整个Hashtable都锁住了,全表锁),当多线程并发的情况下,都要竞争同一把锁,导致效率极其低下。而在JDK1.5后为了改进Hashtable的痛点,ConcurrentHashMap应运而生。ConcurrentHashMap不支持null键和null值,当存在null时,会报空指针异常!!!(因

2021-02-22 14:10:19 159

原创 Java---Semaphore

一.概念Semaphore(信号量)可以用来控制同时访问特定资源的线程数量,常用于限流场景。Semaphore支持公平锁和非公平锁。Semaphore接收一个int整型值,表示许可证数量,如果许可证剩余数量大于零时,线程则允许访问该共享资源;如果许可证剩余数量为零时,则拒绝线程访问该共享资源。 Semaphore所维护的许可证数量就是允许访问共享资源的最大线程数量。 所以,线程想要访问共享资源必须从Semaphore中获取到许可证。二.原理Semaphore内部主要通过AQS(Abstr..

2021-02-20 15:57:09 78

原创 Java---ReentrantReadWriteLock

一.概述ReentrantReadWriteLock是在AQS的基础上实现的一个可重入锁。该锁具备重入锁的可重入性、可中断获取锁等特征,但是与ReentrantLock不一样的是,它的内部维护了一把读锁和一把写锁,读锁是共享锁,写锁是排他锁。这样就保证了写数据时的线程安全性,又保证了读数据时的多线程并发,比较适合读取数据较多而写数据较少的并发场景。写锁是独占的,写时不能有其他线程写也不能读;所有的独锁都释放完之前也不能加写锁。ReentrantReadWriteLock实现了ReadWriteLoc

2021-02-20 14:43:06 146

原创 Java---ReentrantLock

一.AQS1.概述AQS(AbstractQueuedSynchronizer),是抽象队列同步器,其实就是一个用来构建锁和同步器的框架。内部实现的关键是:先进先出的队列、state状态。2.核心思想AQS核心思想是:如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,AQS使用一个voliate int成员变量来表示同步状态,通过内置的FIFO队列来完成获取资源线程的排队工作。AQS使用CAS对该同步状态进行原子操

2021-02-19 18:01:29 113

原创 Java---Volatile

一.概述volatile通常被比喻成"轻量级的synchronized",也是Java并发编程中比较重要的一个关键字。和synchronized不同,volatile是一个变量修饰符,只能用来修饰变量,无法修饰方法及代码块等。二.Java内存模型JMM线程之间的共享变量存储在主内存(共享内存)中,主内存中的变量,不能直接进行读取和修改的,因此每个线程都有一个私有的本地内存,用于存储主内存变量的副本,当线程对主内存进行读取和修改时,首先将主内存中的变量拷贝到本地内存中,在本地内存中读取和修改,

2021-02-18 16:59:18 120 3

原创 Java---synchronized

一.概述1、synchronized作用原子性:synchronized保证语句块内操作是原子的 可见性:synchronized保证可见性(通过“在执行unlock之前,必须先把此变量同步回主内存”实现) 有序性:synchronized保证有序性(通过“一个变量在同一时刻只允许一条线程对其进行lock操作”)2、synchronized的使用修饰实例方法,对当前实例对象加锁 修饰静态方法,多当前类的Class对象加锁 修饰代码块,对synchronized括号内的对象加锁二.原理

2021-02-18 11:21:59 281 4

原创 Java---锁

1.Java里面的各种锁答:其实如果按照名称来说,锁的分类为:公平锁/非公平锁、可重入锁/不可重入锁、独享锁/共享锁、互斥锁/读写锁、乐观锁/悲观锁、分段锁、偏向锁/轻量级锁/重量级锁、自旋锁:(1)公平锁/非公平锁公平锁是指多个线程按照申请锁的顺序来获取锁。非公平锁是指多个线程获取锁的顺序不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取到锁。Java中的ReentrantLock,可以通过构造器指定该锁是否公平,默认是非公平的,非公平锁的优势在于吞吐量比公平锁大。而Java中

2021-02-03 14:30:24 81

原创 Mysql---Show Profile

1.介绍Query Profiler是MYSQL自带的一种query诊断分析工具,通过它可以分析出一条SQL语句的性能瓶颈在什么地方。通常我们是使用的explain,以及slow query log都无法做到精确分析,但是Query Profiler却可以定位出一条SQL语句执行的各种资源消耗情况,比如CPU,IO等,以及该SQL执行所耗费的时间等。2.常用命令是否支持,看看当前mysql 版本是否支持show variables like 'profiling'打开set pr

2021-01-26 14:41:57 58

原创 Mysql---慢查询优化

1.慢查询日志定义MySQL的慢查询日志是Mysql 提供的一种日志记录,它用来记录Mysql中相应时间超过阈值的语句,具体指运行时间超过long_query_time(默认时间是10秒)的sql,这些sql会被记录到慢查询日志中。默认情况下,mysql数据库没有开启慢查询日志,需要手动设置参数;2.常用语句是否开启SHOW VARIABLES LIKE '%slow_query_log%';如何打开或者设置参数set global slow_query_log=1set

2021-01-26 11:07:02 58

原创 Mysql---查询排序优化

1.小表驱动大表即小的数据集驱动大的数据集select * from A where id in(where id from B)等价于:select id from Bselect * from A where A.id=B.id当B表的数据集小于A表的数据集时,用 in优于existsselect * from A where exists(select 1 from B where B.id=A.id)等价于select * from Aselect .

2021-01-26 10:26:45 144

原创 Mysql---索引优化

1.SQL慢(执行时间长/等待时间长)sql语句写的不好 索引失效 关联查询太多join 服务器调优及各个参数设置2.常见的Join2.1.sql的执行顺序from (笛卡尔积) on (主表保留) join (不符合On也添加) where (非聚合 非别名) groupby (改变对表引用) having (可作用与分组后) select distinct union orderby (可使用别名) limit (rows ...

2021-01-25 18:01:50 70

原创 Go---安装Go语言及搭建Go语言开发环境

1.安装1.1下载地址Go官网下载地址:https://golang.org/dl/1.2选择对应的系统下载(这里使用的是Linux系统)1.3.解压tar -C /usr/local -xzf go1.15.6.linux-amd64.tar.gz1.4.配置环境变量(一般自动会配置好的)vim /etc/profile在profile中添加go的环境变量,添加完成后可通过. /etc.profile 让配置文件立即生效。(.和/之间有空格)#goexpor

2021-01-07 09:44:20 119

原创 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 506

原创 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 116 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 54 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 75

原创 SpringBoot学习--002--@SpringBootApplication注解

一.@SpringBootApplication结构@SpringBootApplication包含多个注解,最重要的三个如下:@Configuration @EnableAutoConfiguration @ComponentScan所有我们使用一下三个注解也能启动,但是三个注解过于繁琐,就使用了@SpringBootApplication@Configuration@EnableAutoConfiguration@ComponentScanpublicclass DemoApp

2020-12-11 14:25:55 107

原创 SpringBoot学习--001--入门

springBoot入门官方文档地址中文文档地址一.介绍Spring Boot就是可以轻松创建运行的独立的、基于生产级Spring的应用程序,减少了大量的配置。主要的目标是:为所有Spring开发提供一个从根本上更快,且随处可得的入门体验。 开箱即用,但通过不采用默认设置可以快速摆脱这种方式。 提供一系列大型项目常用的非功能性特征,比如:内嵌服务器,安全,指标,健康检测,外部化配置。 绝对没有代码生成,也不需要XML配置。二.基于IDEA快速生成SpringBoot项目1..

2020-12-09 15:30:43 246

原创 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 930

原创 Linux--文件权限问题总结

1.查看文件ls:显示没有隐藏的文件和文件夹 ls -a:显示当前目录下的所有文件和文件夹,包括隐藏的文件 ls -l:显示没有隐藏的文件和文件夹的详细信息 ls -al:显示当前目录下的所有文件和文件夹的详细信息2.文件详细信息解读第1列:代表文件的类型。我们常见的是d和-。d代表是目录文件。-代表是普通文件。其他不常见的有。l代表链接文件,b代表块设备。c代表字符设备文件。 第2-10列:代表该文件的权限。三个为一组。第一组代表文件所有者的权限,第二组代表同用户组的权限,第三组代表

2020-09-28 10:43:41 533

原创 Git--ssh配置步骤

1.配置(1)首先确认git的用户名和邮箱名是否配置(要和Github上的用户名和邮箱一致)很重要!!!git config --global --list 如果没有配置或者不一致,可以修改git config --global user.name "这里换上你的用户名"git config --global user.email "这里换上你的邮箱"(2)确认是否有秘钥,存在id_rsa h和id_rsa.pub即为存在如果不存在即可生成ssh-keygen -

2020-09-28 10:01:10 396

原创 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 1981

原创 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 185

原创 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 141

原创 Java---反射机制

1.什么是反射?Java的反射就是在运行状态中:对于任意一个类,可以获取类名,包名,类的所有属性和方法; 对于任何一个对象,可以获取所有属性(并且能改变属性)和方法; 判断任意一个对象所属的类 实例化任意一个类的对象...

2020-07-16 17:37:53 98

原创 问题整理---TCP和UDP区别 TCP为什么可靠

2020-06-18 10:07:08 532

原创 问题整理----Mysql分区

1.分区算法1.1.求余算法:(1)key:按照内置的key算法运算结果语法create(.....)partition by key(字段/表达式) partitions 分组数;使用CREATE TABLE t_key(id int not null auto_increment,name VARCHAR(10) not null DEFAULT '',PRIMAR...

2020-06-18 10:06:44 112

原创 Zookeeper

1.zookeeper是什么框架是开源的分布式框架,主要是提供分布式锁,是一个为分布式系统提供一致性、分布式同步的框架。2.提供了什么通知机制(分布式更新,早不同节点进行通知更新) 文件系统3.节点类型持久化的节点(PERSISTENT) 临时节点(在临时节点下不能再创建节点) 序号节点(同级别下不容许同名节点,如果创建重名节点的时候会有序号)4.应用场景高可用的分布...

2020-06-18 10:06:13 80

原创 Java业务开发常见错误

1.并发工具类(没有意识到线程重用导致用户信息错乱的 Bug)问题:ThreadLocal 适用于变量在线程间隔离,而在方法或类间共享的场景。如果用户信息的获取比较昂贵(比如从数据库查询用户信息),那么在 ThreadLocal 中缓存数据是比较合适的做法。但,这么做为什么会出现用户信息错乱的 Bug 呢?案例:使用 Spring Boot 创建一个 Web 应用程序,使用 ThreadL...

2020-06-18 10:05:55 446

原创 秒杀系统---技术总结

1、业务逻辑2、难点短时间高并发,负载压力大; 读多写少的操作; 竞争资源有限,不能多也不能少不能重复3、实现数据库表,主要是更新数量更新语句要设置满足>=0 并发使用栅栏或者countDownLatch()使用,实例化,当计数为0时,同时执行后面的代码,实现高并发; 同步控制:如果用sychronised,悲观锁,速度慢。事务。如果使用乐观锁,可以使用错峰,即休眠...

2020-06-18 10:05:21 100

原创 NIO

一 BIO模型1 模型2 缺点(1)阻塞式I/O(2)弹性伸缩能力差----一个客户端一个线程(3)多线程耗资源二 NIO1 模型2 改进(1)非阻塞I/O模型(2)弹性伸缩能力强-----(服务器端线程数与客户端为1:n理论上有多少客户请求都是可以的)(3)单线程节省资源3 编程详解(1)通道Channela.特性:双向性(既可读又...

2020-06-18 10:04:47 71

原创 数据分类算法

分类是指有效的判断出样本的属性类别。是有监督学习的一种,主要流程是:(1)训练过程:从样本集中进行特征选取,对分类模型进行训练,从而形成分类器;(2)识别过程:首选对要识别的样本进行特征选取,然后利用分类器对其进行分类。分类的技术有很多:决策树、贝叶斯网络、神经网络、遗产算法等。1、基于朴素贝叶斯的分类器朴素贝叶斯分类器是特征条件独立假设并基于贝叶斯定理的分类方法。贝叶斯定

2020-06-18 10:04:16 1880

原创 问题整理----数据库

1.设计及模块划分存储(文件系统) 程序实例(对文件系统的管理)存储管理(一次加载多个页) 缓存机制(LRU) SQL解析 日志管理(binlog) 权限划分 容灾机制 索引管理 锁管理2.索引模块(1)为什么使用索引不使用索引采用的全文检索,当数据小的时候是很快的,但是数据很大的时候就会很慢,因此采用索引,提高查询速度(2)索引数据结构B-Treen阶树...

2020-06-18 10:03:54 111

原创 React 问题总结

1.React报错:The tag is unrecognized in this browser.If you meant to render a React componentimport React from 'react';import ReactDOM from 'react-dom';import hello from './hello';ReactDOM.render(&...

2020-04-06 21:32:57 685

空空如也

空空如也

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

TA关注的人

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