自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ArrayList和LinkedList的三种遍历方式

一.三种遍历List的方式遍历List需要输出List的全部信息,其时间的消耗占比还是很大的,所以,选择正确的遍历方式非常重要,Java提供了三种遍历List的方式,下面我们来一一认识他们。1.1 for循环for循环是通过get(i)实现的,对于ArrayList来说,其实就是下标访问,时间复杂度为O(n),对于ArrayList来说,其底层是双向链表,每次都要从链表头或者表尾去遍历,具体是从头开始还是从尾开始取决于更靠近谁,所以其复杂度是指数级别的。如果对ArrayList和LinkedList

2020-07-24 08:06:06 902

原创 ArrayList和LinkedList的底层分析和比较

一.ArrayList1.1核心成员变量ArrayList的底层是一个动态数组,默认大小为10。transient Object[] elementData;//动态数组 private static final int DEFAULT_CAPACITY = 10;//默认大小private int size;//已经存在的元素个数 protected transient int modCount = 0;//modCount 用来记录 ArrayList 结构发生变化的次数。需要注意

2020-07-23 22:44:59 274

原创 HTTPS披着SSL的HTTP

HTTPS披着SSL的HTTP上篇文章有介绍HTTP的主要特点。死磕HTTP协议----HTTP特点与报文格式我们的HTTP简单高效,对于大部分业务处理的都是游刃有余,但是,事物都有两面性,任何技术都有其局限性,HTTP也不例外,HTTP在面对安全性较高的传输时,表现得相当平庸,这个时候,它就要穿上它那密不透风的披风SSL了。一.HTTP的局限性1.通信使用明文,内容可能会被窃听HTTP采用明文传输,所谓明文传输,即是没有对报文经过加密传输。由于TCP/IP协议族的工作机制,通信内容在所有通信线

2020-06-30 16:35:03 339

原创 hashMap源码分析----彻底搞透

HashMap采用key-value存储结构,每个key对应唯一的value,查询和修改的速度都很快,能达到O(1)的平均时间复杂度。它是非线程安全的,且不保证元素存储的顺序。HashMap是最常见的Map类型结构,那么它有哪些特殊之处呢,下面就来一步一步彻底揭开它的神秘面纱。(基于1.8版本)一.存储结构jdk1.8以前,HashMap采用的存储结构是一个Entry类型数组+单链表,其结构如下:jdk1.8之后,HashMap采用的存储结构是一个Node类型数组+单链表或红黑树。其存储结构如下:

2020-06-29 02:45:57 941 1

原创 线程间通信的方式----全面解析

一.volatile和synchronize1.volatile:读取数据时每次都从主内存中读取,每次写数据都要刷新到主内存,保证了数据的可见性和有序性。2.synchronize:对需要操作的数据进行加锁,保证只有一个线程访问,保证数据的可见性和原子性,但是不保证数据的有序性。二.等待通知机制调用此类方法首先都要获得锁,即该语句要放到synchronize语句块内部。如果没有加锁会抛出异常:Exception in thread “main” java.lang.IllegalMonitorSta

2020-06-28 16:16:35 310 1

原创 动态规划详解和实战

1.动态规划1.什么是动态规划所谓动态规划,即通过**拆分问题,**定义问题状态和状态之间的关系,将求解目标的过程通过动态的、递归求解子问题的方式去实现。在使用递推的过程中,往往涉及到很多重叠的子问题,其时间复杂度一般都是指数级别,所以在实际的应用中,一般都会通过记忆数组的方式来避免重复计算(一般是用一维数组或者二维数组来保存)。2.动态规划问题如何解决动态规划问题一般是通过逆向发现递推关系,正向计算的方式进行求解,其步骤大致如下:寻找递推关系定义记忆数组初始化记忆数组应用递推关系求解

2021-11-14 00:01:15 497

原创 mysql如何部分解决幻读

两次范围查找不一致快照读部分解决了幻读的问题,、插入会有幻读的情况发生,示例如下:#表结构和数据CREATE TABLE `locktest` ( `id` int(11) NOT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;INSERT INTO `locktest` (`id`, `age`) VALUES (3, 3);INSERT IN

2021-11-11 20:47:29 671

原创 MVCC如何实现的

行记录版本+undolog实现MVCCtrx_id: 操作这个数据事务 ID ,也就是最后一个对数据插入或者更新的事务 ID 。**roll_ptr:**回滚指针,指向这个记录的 Undo Log 信息。update和insert时,会将当前事物的id(递增)赋值给行的事物IDdelete时,会将当前的事物ID赋值给删除字段select时,会选择trx_id小于当前事物并且删除id大于当前事物的行,可以通过回滚指针进行遍历...

2021-11-11 20:46:32 265

原创 怎么给字符串加索引

1.直接创建完整索引,这样可能比较占用空间;2.创建前缀索引,节省空间,但会增加查询扫描次数,并且不能使用覆盖索引(即使一个字符串的长度小于前缀索引长度,也需要进行回表判断);3.倒序存储,再创建前缀索引,用于绕过字符串本身前缀的区分度不够的问题,不支持范围查找;4.创建 hash 字段索引,查询性能稳定,有额外的存储和计算消耗,不支持范围扫描。倒序索引和hash字段索引的区别1.从占用的额外空间来看,倒序存储方式不会消耗额外的存储空间,而 hash 字段方法需要增加一个字段。当然,倒序存储方式使

2021-11-11 20:44:21 894

原创 mysql为什么会选错索引

**优化器的逻辑:**根据扫描行数、是否回表、使用临时表、使用排序等进行综合判断**扫描行数怎么判断:**根据索引区分度进行评估,我们称之为基数(cardinality):一个索引上不同值的个数**cardinality怎么获得:**采样统计,变更了一定行数的数据会自动更新(analyze table t,重新统计索引信息)索引选错了怎么办:采用 force index 强行选择一个索引(一般不用,索引名字改了程序也得改)我们可以考虑修改语句,引导 MySQL 使用我们期望的索引新建一个更合适

2021-11-11 20:43:03 323

原创 唯一索引和普通索引如何抉择

查询过程:select id from T where k=5(k上有索引)* 普通索引,查找到满足条件的第一个记录 (5,500) 后,需要查找下一个记录,直到碰到第一个不满足 k=5 条件的记录。* 唯一索引,由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止继续检索。他们之间的性能差异几乎可忽略,因为查询都是以页为单位读取到内存筛选。更新过程changebuffer的使用,如果数据页在内存中就直接更新,而如果这个数据页还没有在内存中的话,将这些更新操作缓存在 change..

2021-11-11 20:42:30 294

原创 什么叫联合索引的最左匹配原则

联合索引就是多个字段共同构成一个索引,如果创建了索引(A,B,C),则相当于创建了(A)、(A,B)、(A,B,C)三个索引,原因是因为联合索引存储时,是先根据A的大小排序,然后再根据B的大小排序,最后根据C的大小排序,其存储结构可以参考入下图。优势:索引列越多,筛选出的数据越少;一个索引顶多个索引;覆盖索引减少回表注意事项:最左匹配,最常用的放最左边存储结构:...

2021-11-11 20:40:53 343

原创 B+树索引是如何实现的

1. B+树结构聚簇索引非聚簇索引B+树索引并不能找到一个给定键值的具体行。B+树索引能找到的只是被查找数据行所在的页。然后数据库通过把页读入到内存,再进行查找2. 哈希索引h(k) = k mod m,m的取值为略大于缓冲次页数量两倍的质数冲突解决方式:链接法自适应哈希索引经哈希函数映射到一个哈希表中,因此对千字典类型的查找非常快速,但是对于范围查找就无能为力了3. 全文索引全文检索通常使用倒排索引(inverted index) 来实现,也就是通过单词找句子,而不是通过句子

2021-11-11 20:32:29 901

原创 mysql三层架构

一.mysql架构1.Server层1.1连接池连接器主要负责客户端连接的权限校验、建立连接并且维持连接。我们最常用的TCP/IP形式的连接。mysql -h ip -P port -u user -p #数据库连接show processlist #查看数据库当前所有的连接当客户端发起数据库连接时,连接层会查mysql.user表,对连接进行用户名和密码认证。如果用户名密码认证通过,连接器会到权限(mysql.user)里面查出你拥有的权限。之后,这个连接里面的权限

2021-11-11 20:29:20 2396 2

原创 Linux系统目录结构

<h1 id="linux系统目录结构">Linux系统目录结构</h1><p><img src="https://img-blog.csdnimg.cn/20210815213646842.png

2021-08-15 21:36:46 106

原创 git

<h1 id="一工作区、暂存区、和版本库">一.工作区、暂存区、和版本库</h1><ul><li>工作区:能看到的目录</li><li>暂存区:交给git管理的文件</li><li>版本库:

2021-08-15 20:45:57 62

原创 IDEA自定义注释

IDEA自定义注释一.自定义类注释1.1打开设置1.2设置模版二.自定义方法注释2.1打开设置2.2创建Template Group2.3创建Live Template2.4设置模版三.效果图一.自定义类注释1.1打开设置preferences->Editor->File And Code Templates->Class1.2设置模版在红色框中添加以下内容,Applay即可/** *@Description *@Author yaoliangjin *@Data $

2021-08-12 14:27:10 7058 1

原创 一.初识Java并发编程

一.初识Java并发编程一.什么是并发编程​ 在程序中,有很多耗时但又不占用CPU的任务(比如输入输出),如果采用用串行的方式运行程序,那么CPU绝大部分的时间都是空闲的.CPU通过给每个线程分配时间片,让各个线程间断执行,以此来充分利用CPU.因为时间片非常短,让我们感觉这些任务是同时执行的,所以叫并发执行.(需要注意,这里的并发实际上每个瞬间只有一个线程在运行)​ 并发编程是为了提高CPU效率而设计的,那么并发编程一定快么?上图是一个累加程序运行时间分析,由表可知,当累加的次数大于1百万时,并

2021-03-31 15:31:54 76

原创 手撕三个线程并发按照顺序打印数字

三个线程并发按照顺序打印数字,直觉是创建一个runnable任务,然后建三个线程去执行。public class Main { //三个线程并发打印数字 public static void main(String[] args) { Count count = new Count(); Thread thread1 = new Thread(count, "1"); Thread thread2 = new Thread(count, "2

2020-08-04 14:53:40 310

原创 Object方法的秘密

为什么要有Object父类Object是所有类的父类,里面定义了13个常用的方法,为什么要让它成为所有类的父类呢,个人感觉主要包括一下两点:1.一种规范,方便类的转换,如果不知道一个对象的类型,可以向上转型为Object2.提供了常用和基本的方法,代码可以得到复用,比如equals,hashCode等,能够极大的减少开发工作。Object的13个方法1.Object() public Object() {}是一个默认无参构造方法。2.hashCode()public native

2020-07-23 15:29:50 143

原创 死磕HTTP协议----HTTP特点与报文格式

确保Web安全的HTTPS一.HTTP简要回顾1.1简介HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。1.2主要特点HTTP主要有五大特点:A.用于客户端和服务器端之间通信请求资源的一端为客户端,提供资源的一端为服务段。HTTP协议能明确区分哪段是客户端,哪段是服务段。B.无连接HTTP协议初始版本,每进行一次HTTP通信就要断开一次TCP连接,

2020-06-30 00:43:43 228

原创 进程间通信----概括

进程间通信的方式1.管道(pipe)管道是通过pipe函数创建的,fd[0] 用于读,fd[1] 用于写。它具有一下限制:1.支持半双工通信2.只能在父子进程间通信2.有名管道(FIFO)有名管道不同于匿名管道之处在于它提供了一个路径名与之关联,以有名管道的文件形式存在于文件系统中,这样,即使与有名管道的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过有名管道相互通信。FIFO 常用于客户-服务器应用程序中,FIFO 用作汇聚点,在客户进程和服务器进程之间传递数据。3.

2020-06-28 19:07:39 103

原创 进程与线程的区别及选择

1.调度级别: 进程是资源调度的基本单位,线程是处理器调度的基本单位2.资源: 进程拥有自己的地址空间和堆,这些资源是线程共享的,线程也拥有独享的资源,比如程序计算器,寄存器,栈等。所以,进程切换开销会比线程开销大。3.通信方式:进程间通信方式主要有:1.管道(pipe)2.有名管道(FIFO)3.信号(Signal)4.消息(Message)队列5.共享内存(share memory)6.信号量(semaphore)7.套接字(socket)线程间通信方式主要有:1.volati

2020-06-28 16:14:43 216

原创 肺炎实时信息爬取网页可视化

2020年肺炎是很受大家关注的一个问题。作为一个大三党,从肺炎刚开始那会儿就准备爬取数据并且做一个网页,奈何菜狗平日多有懒惰,一直拖到最近才把这个项目弄完。为了弄这个网页,我特地跑去学了java爬虫,网页相关的jsp js echart servlet,这期间花费了不少时间,最后,也成功把项目弄出来了!!倍有成就感。获取网页数据 URL url = new URL(requesturl); httpsURLConnection = (HttpsURLConnection)

2020-05-22 10:48:02 356 1

原创 继c#游戏编程 拼拼乐

消除了丑陋碍眼的标题栏加了游戏提醒功能主要改进是为了玩家没有头绪的时候提供一些可能的交换方法,算法很简单,提醒的交换为随机选取,所以需要调用随机函数,然后判断该图片是否在正确位置,如果不是,则提醒它和正确位置交换。...

2020-03-22 14:49:43 165

原创 C#游戏 拼拼乐

该游戏借鉴c#windows游戏设计课本 剔除了丑陋的memustrip 和 statusstrip 加入了大量button label 和flowlayoutpanel 加入了media player播放器来实现背景音乐和音效的同步播放 界面效果直接上图开始页难度音效帮助与说明图片选取方式 游戏等待观看图像游戏开始emmm码着字游戏输了上面的图像系统 声音系统这里...

2020-03-21 23:29:35 341

空空如也

空空如也

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

TA关注的人

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