
学习笔记
文章平均质量分 84
程序员阿杜吖
死磕技术,热爱生活!
展开
-
一条SQL语句是如何执行的?
一条sql是如何执行的?原创 2022-04-05 13:47:51 · 1332 阅读 · 0 评论 -
MySQL锁
锁.md文章首发于GitHub开源项目: Java成长之路 欢迎大家star!锁的定义锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。MySQL锁的分类从对数据操作的类型(读\写)分读锁(共享锁):针对同一份原创 2021-10-04 22:59:46 · 143 阅读 · 0 评论 -
MySQL如何避免索引失效?
文章首发于GitHub开源项目: Java成长之路 欢迎大家star!案例演示建表及初始化数据CREATE TABLE staffs( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(24) NOT NULL DEFAULT '', age INT NOT NULL DEFAULT 0, pos VARCHAR(20) NOT NULL DEFAULT '',#.原创 2021-10-04 20:32:34 · 399 阅读 · 0 评论 -
MySQL性能分析和索引优化
文章首发于GitHub开源项目: Java成长之路 欢迎大家star!MySQL常见瓶颈CPUSQL中对大量数据进行比较、关联、排序、分组IO实例内存满足不了缓存数据或排序等需要,导致产生大量 物理 IO。数据重复且分布平均的表字段,因此应该只为最经常查询和最经常排序的数据列建立索引。 注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。查询执行效率低,扫描过多数据行。锁不适宜的锁的设置,导致线程阻塞,性能下降。死锁,线程之间交叉调用资源,导致死锁,程序卡.原创 2021-10-04 15:05:54 · 248 阅读 · 0 评论 -
MySQL索引优化之路
索引文章已同步至GitHub开源项目: Java超神之路概念MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。 可以理解为:排好序的快速查找的数据结构数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引。一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上优势类似大学图书馆建书目索引,原创 2021-10-03 21:09:59 · 142 阅读 · 0 评论 -
MySQL存储过程+函数
存储过程和函数文章已同步至GitHub开源项目: Java超神之路变量系统变量全局变量会话变量查看所有变量SHOW [GLOBAL/SESSION] VARIVALES 条件查询SHOW [GLOBAL/SESSION] LIKE '%char%'查看某个变量的值SELECT @@[GLOBAL/SESSION].系统变量名设置值SET [GLOBAL/SESSION].系统变量名 = 值;自定义变量用户变量作用域: 针对于当前会话有原创 2021-10-02 21:16:24 · 142 阅读 · 0 评论 -
Nginx原理解析
文章已同步至GitHub开源项目: Java超神之路master和worker当linux启动的时候,会有两个和nginx相关的进程,一个是master,一个是worker。master如何工作当客户端发送请求到nginx之后,master会接收到这个请求,然后通知所有的worker进程,此时,worker会对这个请求进行争抢。某个worker抢到请求之后,就会根据设置好的步骤进行请求转发。一个master和多个worker的好处可以使用nginx -s reload热部..原创 2021-08-12 20:53:26 · 77 阅读 · 0 评论 -
面试官:JVM的运行时数据区了解不?
JVM-运行时数据区内部结构文章已同步至GitHub开源项目: JVMStudy一、内存内存是非常重要的系统资源,是硬盘和cpu的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了JAVA在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的jvm对于内存的划分方式和管理机制存在着部分差异(对于Hotspot主要指方法区)二、运行时数据区在JVM中的位置三、运行时数据区体内部结构一个进程对应一个jvm实例,一个运行时数据区,又包含多个线程,这原创 2021-08-04 20:35:17 · 113 阅读 · 0 评论 -
面试官:你了解Java中的锁优化吗?
锁优化文章已同步至GitHub开源项目: JVM底层原理解析 高效并发是JDK5升级到JDK6后一项重要的改进,HotSpot虚拟机开发团队在这个版本上花费了巨大的资源去实现各种锁优化。比如,自旋锁,自适应自旋锁,锁消除,锁膨胀,轻量级锁,偏向锁等。这些技术都是为了在线程之间更高效的共享数据及解决竞争问题。从而提高程序的运行效率。自旋锁和自适应自旋锁自旋锁 在互斥同步的时候,对性能影响最大的就是阻塞的实现,挂起线程,恢复线程等的操作都需要用户态转为内核态去完成。这些操作给性能带来了原创 2021-08-03 14:31:49 · 267 阅读 · 0 评论 -
Java线程安全-JVM角度解析
文章已同步至GitHub开源项目: JVM底层原理解析线程安全 当多个线程同时访问一个对象,如果不用考虑这些线程在运行环境下的调度和交替执行,也不需要考虑额外的同步,或者在调用方法时进行一些其他的协作,调用这个对象的行为都可以获得正确的结果。那么就称这个对象是线程安全的。 这个定义是严谨并且有可操作性的,他要求线程安全的代码都必须具备一个共同的特性。代码本身封装了所有必要的正确性保障手段(如互斥同步等)。令调用者无需关心多线程下的调用问题。更无需自己实现任何措施来保证安全。Java中的线程安.原创 2021-08-02 14:11:02 · 179 阅读 · 0 评论 -
Java的JVM是如何实现多线程的?
Java线程模型文章已同步至GitHub开源项目: Java超神之路 并发不一定都要用到线程,比如PHP中用到的是多进程。但是在Java中并发基本上都是使用线程来实现的。我们先来看看线程在Java虚拟机中是如何实现的。线程的实现 主流的操作系统都提供了线程的实现,Java线程则提供了在不同硬件和操作系统下对线程的统一处理。每个已经start且并未结束的Thread类的实例对象都是一个线程。 我们查看Thread的JDK源码,发现所有的方法都被native修饰。也就是说,Thread是使用原创 2021-08-01 14:55:24 · 678 阅读 · 0 评论 -
详解Java内存模型
文章已同步至GitHub开源项目: JVM底层原理解析Java内存模型 JVM虚拟机规范中曾经试图定义一种Java内存模型,来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都可以达到一致性的内存访问效果。 然而定义这样一套内存模型并非很容易,这个模型必须足够严谨,才能让Java的并发内存访问操作不会有歧义。但是也必须足够宽松,这样使得虚拟机的具体实现能够有自由的发挥空间来利用各种硬件的优势。经过长时间的验证和弥补,到了JDK1.5(实现了JSR133规范)之后,Jav.原创 2021-07-31 22:11:49 · 202 阅读 · 1 评论 -
面试官:你来说说JVM中的类加载子系统吧
类加载子系统文章已同步至GitHub开源项目: JVM底层解析一。类加载子系统代码编译的结果从本地机器指令码转化为字节码,是存储格式发展的一小步,但却是编程语言发展的一大步 —— 《深入理解JVM虚拟机》周志明·著 Java虚拟机将描述类的数据从class字节码文件加载到内存,并且对数据进行校验,转化,解析,初始化的工作,最终形成在内存中可以直接使用的数据类型。这个过程叫做虚拟机的类加载机制。图示作用类加载子转载 2021-07-30 20:38:39 · 97 阅读 · 0 评论 -
一文详解Java多线程
文章来源:https://github.com/shaoxiongdu1. 基本概念程序(Program)程序是为了完成特定任务,用某种语言编写的一组指令的集合,即指一段静态代码块,静态对象。进程(process)程序是静态的,进程为动态的。进程是程序的一次执行过程,或者是正在执行的一个程序,是一个动态的过程。有它自生 产生,存在,消亡的过程。进程作为资源分配的单位,每个进程启动时系统都会为他分配不同的内存区域。线程(Thread)进程可以进一步细化为线程,是原创 2021-07-21 20:02:01 · 127 阅读 · 0 评论 -
JVM-执行引擎
????JVM 底层原理解析 + 面试知识点整理 Github地址JVM执行引擎执行引擎概述执行引擎是Java虚拟机的核心组成部分之一。虚拟机是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作转载 2021-07-12 10:55:34 · 158 阅读 · 0 评论 -
4W字爆肝JVM底层原理和项目调优!
大家好,我是杜少雄,每天推荐一个有用的开源项目,装满你的收藏夹,让你轻松节省开发效率,实现不加班不熬夜不掉头发! 今天给大家推荐一个【JVM底层原理解析+面试知识点总结】的开源项目,对大家学习Java的底层原理很有帮助## 项目介绍 项目列举了JVM 底层原理解析 + 面试知识点整理 包括但不限于以下内容(截图自仓库)并且带有在线站点方便大家学习。文章中关键的知识点有详细的图示说明并且带有演示的代码且有详细的注释项目中参考自官方的规范 能保证防止版本造成的知识点差异原创 2021-07-06 21:46:49 · 116 阅读 · 0 评论 -
JVM之垃圾回收相关算法
JVM自学指南已经开源到GIthub项目 JVM自学指南欢迎star fork 万分感谢!一、判断阶段:对象存活判断在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃圾标记阶段。那么在JVM中究竟是如何标记一个死亡对象呢?简单来说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡。判断对象存活原创 2021-07-04 14:45:02 · 98 阅读 · 0 评论 -
JVM创建对象之内存解析
JVM自学指南已经整理到我的GitHub开源项目: [JVM自学指南]对象的实例化内存布局与访问定位+直接内存一、对象的实例化1、创建对象的方式new最常见的方式变形1 : Xxx的静态方法变形2 : XxBuilder/XxoxFactory的静态方法Class的newInstance():反射的方式,只能调用空参的构造器,权限必须是publicConstructor的newInstance(Xxx):反射的方式,可以调用空参、带参的构造器,权限没有要求使用clone() :原创 2021-07-02 17:27:40 · 201 阅读 · 0 评论 -
JVM之字符串常量池
JVM自学指南已经整理到我的GitHub开源项目: [JVM自学指南]字符串常量池一、字符串的基本特性String:字符串,使用一对""来表示。String sl = "hello";//字面量的定义方式 在字符串常量池中String s2 = new String("hello"); 调用构造方法String声明为final的, 不可被继承String 实现的接口public final class String implements java.io.Serializable原创 2021-07-02 17:24:04 · 252 阅读 · 0 评论 -
JVM之程序计数器
JVM自学指南已经整理到我的GitHub开源项目: [JVM自学指南]程序计数器一、概念JVM中的程序计数寄存器(Program Counter Register),Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。JVM中的PC寄存器是对屋里PC寄存器的一种抽象模拟二、作用PC寄存器是用来存储指向下一条指令的地址,也即将将要执行的指令代码。由执行引擎读取下一条指令。三、特征它是一块很小的内存空间,几乎可以忽略不计。也是运行速转载 2021-06-25 21:30:21 · 160 阅读 · 0 评论 -
JVM之虚拟机栈
JVM自学指南已经整理到我的GitHub开源项目: [JVM自学指南]虚拟机栈一、虚拟机栈概述1、背景由于跨平台性的设计,java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。2、内存中的堆与栈栈运行时的单位。解决程序的运行问题,即程序如何执行,或者说如何处理数据。存放基本数据类型的局部变量,以及引用数据类型的对象的引用。堆是存储的单位。堆解决的是数据存原创 2021-06-25 21:29:29 · 150 阅读 · 0 评论 -
JVM之堆
JVM自学指南已经整理到我的GitHub开源项目: [JVM自学指南]堆一、堆的核心概述一个进程对应一个jvm实例,同时包含多个线程,这些线程共享方法区和堆,每个线程独有程序计数器、本地方法栈和虚拟机栈。一个jvm实例只存在一个堆内存,堆也是java内存管理的核心区域Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间(堆内存的大小是可以调节的)《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的所原创 2021-06-25 21:28:44 · 334 阅读 · 0 评论 -
JVM之类加载子系统
JVM自学指南已经整理到我的GitHub开源项目: JVM自学指南类加载子系统概述一、图示二、作用类加载子系统负责从文件系统或者网络中加载Class文件(Class文件在开头有特定标识)。l类加载器(Class Loader)只负责class文件的加载,至于是否可以运行,由执行引擎(Execution Engine)决定。加载的类信息存放于一块成为方法区的内存空间。除了类信息之外,方法区还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量原创 2021-06-25 21:26:59 · 167 阅读 · 0 评论 -
如何部署一个属于自己的【个人博客网站】?超详细!!!
项目开源地址:www.github/shaoxiongdu/blog一.博客预览1.博客在线预览www.shaoxiongdu.cn2.博客截图预览二.项目选型个人博客语言版本前端基本语言HTML_+CSS+JavaScript——前端UI框架SemanticUI2.2.4前端渲染模板引擎Thymeleaf2.1.5.RELEASE后端框架SpringBoot1.5.7.RELEASEJDK版本Java1.8.原创 2021-05-09 16:36:30 · 1844 阅读 · 3 评论 -
计算机网络_传输层详解
来源:我的个人技术博客计算机网络-传输层详解一. 传输层概述1. 进程之间的通信运输层向上层【应用层】提供端到端的逻辑通信服务,即应用到应用的通信服务。只有两个主机之间的协议栈才会有传输层,网络核心部分中只用到下面的三层【网络层,数据链路层,物理层】上述中逻辑通信的意思是:运输层之间的通信好像是沿着水平方向传送数据,但事实上两个运输层之间没有水平方向的物理连接,需要按照虚线的方向多次传送。如下图所示。2.因特网的传输层协议2.1 分类因特网(一般是TCP/IP网络)为上层提供两个不同的原创 2021-05-08 22:18:00 · 1636 阅读 · 0 评论 -
从0开始自学的《计算机网络》开源项目!
前言计算机网络基础 该是程序猿需掌握的知识,但往往会被忽略。今天,我将献上一份详细 & 清晰的从0 开始学习计算机网络的开源项目,希望你们会喜欢。项目介绍一份可以自学计算机网络的资料。作者通过详细的图解以及文字说明,让计算机体系结构的学习变的非常简单项目截图项目目录项目参考书籍《计算机网络教程》 《计算机网络:自顶向下》 《图解TCP/IP协议》《图解HTTP协议》GitHub地址GitHub地址:https://github.com/shaoxiongdu/原创 2021-04-28 18:06:39 · 241 阅读 · 0 评论 -
计算机网络_网络层详解
文章来源: 我的技术博客二.计算机网络-网络层详解1.网络层概述网络层关注的是如何将IP数据报从源主机沿着网络发送到目标主机。其具体步骤为将上一层传输层的报文段或者用户数据报添加必要的控制信息封装成IP数据报,并使用下一层数据链路层的服务将IP数据报发送给指定的主机。2.网络层功能分组转发 当一个分组到达路由器的一条输出线路时,该路由器必须将该分组转发到适当的输出链路。所以,在路由器内部,需要有一个转发表。 在转发分组时,读取从IP数据报中首部的转发标识并在转发表中查询,其查询结果指原创 2021-04-24 22:02:23 · 720 阅读 · 0 评论 -
计算机网络体系结构
计算机网络体系结构概念**计算机网络及其部件所应完成的功能的精确定义.**体系结构是抽象的,实现则是具体的.体系结构的具体实现OSI七层协议开放系统互连参考模型(Open Systems Interconnection Reference Model) 简称OSI 由国际标准化组织成立.“开放”是指只要遵循OSI标准,一个系统可以和位于世界上任何地方,也遵循这一标准的系统进行通信.TCP/IP协议TCP/IP协议是一个四层的体系结构,目前为止得到了最广泛的应用.五层协议在学习计算机网络原创 2021-04-23 20:00:17 · 134 阅读 · 0 评论 -
用开源项目死磕数据结构与算法!
程序员的双手是魔术师的双手,他们把枯燥无味的代码变成了丰富多彩的软件。——《疯狂的程序员》前言数据结构想必大家都不会陌生,对于一个成熟的程序员而言,熟悉和掌握数据结构和算法也是基本功之一。数据结构本身其实不过是数据按照特点关系进行存储或者组织的集合,特殊的结构在不同的应用场景中往往会带来不一样的处理效率。今天给大家推荐一个开源的项目,对大家学习或者复习数据结构与算法很有帮助.项目名称DataStructureForJava项目介绍该项目用Java语言实现了常见的数据结构 包括但不限于常用.原创 2021-04-14 22:09:52 · 293 阅读 · 0 评论 -
开源分享-JDK源码阅读指南
JDK源码阅读指南Read The Fucking Source Code ---- RTFM源码面前,了无秘密 ---- 侯捷背景今天逛GitHub,发现了一个神级项目,作者将主要整理/记录阅读JDK源码时的理解与体会分享出来,便于大家学习。这里将项目分享出来,让小伙伴们能更好的学习Java。项目截图项目食用指南项目中包含多个分支,主分支命名为master,测试分支命名为test,源码/笔记分支以JDK-X(X是JDK版本)命名。master分支不定期汇总源码笔记与测试代码原创 2021-03-21 21:34:21 · 619 阅读 · 0 评论 -
Java之面向对象思想
OOP介绍OOP全称Object Oriented Programming,是指面向对象程序设计,是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。面向对象编程技术的关键性观念是它将数据及对数据的操作行为放在一起,作为一个相互依存、不可分割的整体——对象。对于相同类型的对象进行分类、抽象后,得出共同的特征而形成了类。面向对象编程就是定义这些类。OOP四大原则这些是基金会的基础。共同形成面向对象的编程范式的 4 个主要特征。了解它们对于成为一名成功原创 2021-03-15 18:21:22 · 136 阅读 · 0 评论 -
浅谈Java异常原理
异常机制的概述异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。程序错误分为三种:1.编译错误;2.运行时错误;3.逻辑错误。(1)编译错误是因为程序没有遵循语法规则,编译程序能够自己发现并且提示我们错误的原因和位置,这个也是大家在刚接触编程语言最常遇到的问题。(2)运行时错误是因为程序在执行时,运行环境发现了不能执行的操作。(3)逻辑错误是因为程序没有按照预期的逻辑顺序执行。异常也就是指程序原创 2021-03-13 21:39:08 · 238 阅读 · 1 评论