- 博客(83)
- 资源 (1)
- 收藏
- 关注
原创 Java学习笔记——HashMap底层源码分析
目录源码内一些参数介绍实例化(声明一个HashMap对象)注意事项添加键值对hash(key)源码分析putVaule()源码分析resize()源码分析扩容后重新计算键值对在数组中的位置JDK1.7与JDK1.8的区别插入值put扩容resize()源码内一些参数介绍capacity:HashMap的容量,即Node[]数组的size,HashMap会强制的将容量设置为2的幂,这样在对key取hash值的时候可以直接使用位运算来计算hash值。(比如容量为16时,只取key对象hash值的后4位,
2021-06-15 21:09:03 2721 12
原创 TCP三次握手和四次挥手
目录TCP建立连接时用到的字段三次握手四次挥手TCP建立连接时用到的字段序号seq:表示在一个TCP连接中传送的字节流中每一个字节都按顺序进行编号,该字段就表示本报文段所发送数据的第一个字节的序号。(序号是建立连接时产生的随机数开始的)确认号ack:期望收到对方下一个报文段的第一个数据字节的序号,如果确认号为n,就说明到序号为n-1为止的数据都已经正确收到确认位ACK:确认位为1时,确认号ack才有效,在建立连接后,所有传输数据的报文段都必须把ACK置为1同步位SYN:当SYN=1时,表明是一个
2021-06-03 21:47:25 121
原创 java多线程——线程安全
目录概述同步代码块总结概述什么是线程安全问题多个线程执行的不确定性引起执行结果的不稳定多个线程对账本的共享(共享数据),会造成操作的不完整性,会破坏数据例子:之前卖票的例子,最后可能出现错票,即100张票,票号只可能是100~0,但是最后出现了票号为-1的票。或者出现重票,即有3张票号都为100的票的情况。原因:当某个线程操作车票的过程中,尚未操作完成,其他线程也参与了进来,也对车票进行操作如何解决:当一个线程a在操作共享数据(ticket)的时候,其他线程不能参与进来。直到线
2021-06-03 17:19:21 155
原创 java学习笔记——反射
目录反射的概述反射机制提供的功能类的加载过程获取Class对象的四种方式哪些类型可以有Class对象使用反射创建运行时对象(最常用)使用反射机制创建对象反射的概述反射是被视为动态语言的关键,反射机制允许程序在执行期间借助于Reflection API来取得任何类的内部信息,并能直接操作任意对象的内部属性和方法。动态语言:一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码都可以在运行时被引进,已有的函数可以被删除或者是其他结构上的变化。即在运行时可以根据某些条件改变自身结构。主要的动态语言
2021-05-30 17:08:39 97
原创 计算机网络——概念、功能和分类
目录概念功能组成组成部分工作方式功能组成分类按分布范围按使用者按交换技术分按拓扑结构分按传输技术分总结概念计算机网路是一个将分散的、具有独立功能的计算机系统,通过通讯设备与通讯线路连接起来,由功能完善的软件实现资源共享和信息传递总结:计算机网络是互连的、自治的计算机集合互连:各个计算机系统之间互连互通自治:无主从关系,每个计算机系统都独立的运行(不能彼此控制对方)功能数据通信:数据通过计算机网络从一台主机传到另一台主机资源共享:硬件资源共享:比如接入网络的打印机,在同一网络
2021-05-12 17:43:24 178
原创 Java中TreeSet添加重复元素问题
目录TreeSet的继承关系TreeSet任何判断重复元素改写Comparator添加重复元素以及出现的问题TreeSet的继承关系由上图可以看出TreeSet继承了AbstractSet抽象类,实现了NavigableSet接口。TreeSet的本质是一个有序的,并且没有重复元素的集合,它是通过TreeMap实现的。TreeSet中含有一个"NavigableMap类型的成员变量"m,而m实际上是TreeMap的实例。TreeSet任何判断重复元素由于TreeSet是通过TreeMap实
2021-05-08 14:51:56 2716 3
原创 java多线程——线程的生命周期
目录线程生命周期中的几种状态线程生命周期中的几种状态新建:当一个Thread类或其子类的对象被声明并创建的时候,新生的线程对象处于新建状态就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已经具备了运行的条件,只是没分配到CPU资源运行:当就绪的线程被调度并获得CPU资源的时候,便进入了运行状态,run()方法定义了线程的操作和功能阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让出CPU并暂停自己的执行,进入阻塞状态死亡:线程完成了它全部的工作或线程被
2021-04-28 20:59:14 47
原创 java多线程——线程的创建(Thread类、Runable接口、线程的优先级)
目录三种创建方式通过Thread类创建步骤案例注意的问题Thread类中常用的方法总结三种创建方式基于什么创建创建的方式Thread类继承Thread类Runnable接口实现Runnable接口callable接口实现callable接口通过Thread类创建步骤自定义线程类继承Thread类重写run()方法,编写线程执行体(当成main()方法用)创建线程对象,调用start()方法启动线程案例创建两个线程,其中一个线程打印100以内的
2021-04-28 19:54:13 272
原创 java多线程——线程、进程、多线程
目录概述进程(Process)与线程(Thread)特点概述普通方法与多线程的区别普通方法在调用某个方法的时候,会停止现在的工作,只执行调用方法中的内容(效率较低)而多线程是主方法和调用的方法同时执行(效率高)进程(Process)与线程(Thread)进程与程序的区别:程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念进程则是执行程序的一次执行过程,它是一个动态的概念。是系统资源分配的单位通常在一个进程中可以包含若干个线程,当然一个进程中至少有一
2021-04-27 16:43:54 71
原创 MySQL学习笔记——流程控制结构
目录概述if函数case结构作为表达式使用作为单独的语句使用概述分类顺序结构:程序从上往下依次执行分支结构:程序从两条或多条路径中选择一条去执行循环结构:程序在满足一定条件的基础上,重复执行一段代码if函数功能:实现简单的双分支语法:if(表达式1,表达式2,表达式3)执行顺序:如果表达式1成立,则if函数返回表达式2的值,否则返回表达式3的值应用:任何地方case结构注意:如果then后面跟的是语句的话,一定要加分号;,并且结尾的end变为end case;
2021-04-25 21:24:28 129
原创 MySQL学习笔记——存储过程和函数
目录概述储存过程创建语法调用语法储存过程举例空参储存过程创建带in参数模式的储存过程创建带out模式的存储过程创建带inout模式参数的储存过程删除存储过程查看存储过程的信息函数创建语法调用语法概述类似于java中的方法好处:提高代码的重用性简化操作储存过程含义:一组预先编译好的SQL语句的集合,理解成批处理语句存储过程不能修改内容,如果要修改内容,就把存储过程删了,重新建一个存储过程。好处:提高代码的重用性简化操作减少了编译次数,并且减少了和数据库服务器的连接次数,提
2021-04-23 19:57:19 120
原创 MySQL学习笔记——变量
目录概述系统变量自定义变量用户变量局部变量用户变量和局部变量对比概述分类系统变量:全局变量:服务器每次启动将为所有的全局变量赋初值,针对所有的会话(连接)有效,但是不能跨重启(重新启动后,会恢复默认的初值)会话变量:仅仅针对当前会话(连接)有效自定义变量用户变量局部变量系统变量说明:变量由系统提供,不是用户自定义,属于服务器层面语法:查看所有全局变量:show global|【session】 variables;.其中gloable表示查看全局变量;ses
2021-04-22 21:38:43 78
原创 java学习笔记——TreeSet和PriorityQueue对比
两者区别-排序实现原理是否允许重复元素所继承的集合类集合内元素是否有序应用场景TreeSet排序二叉树不允许,使用add()方法时遇到相同元素会添加失败Set集合有序需要找出集合中大于等于某个数值的最小值(ceiling()方法),或小于等于某个数值的最大值(lower()方法),即有不等关系的需求(时间复杂度为二分法的时间复杂度)PriorityQueue堆排序允许queue(队列)集合无序需要找出集合中的最大值或最小值时,即有最值的需求..
2021-04-22 15:05:08 1727
原创 MySQL学习笔记——视图
目录概述视图的好处创建视图视图的修改方式一方式二删除视图查看视图视图的更新插入修改删除注意事项视图与表的对比概述含义:虚拟表,和普通表一样使用,其作用是简化代码MySQL5.1版本出现的新特性,是通过表动态生成的数据,即一个虚拟的结果集。 行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的,只保存了SQL逻辑,不保存查询结果。举个有助于理解的例子:有两个班级,班级A和班级B,现在需要从A、B两班中各抽出一些人来参加歌唱比赛。对于班级A和班级B来说,他们都是实际存在的一个班级,对
2021-04-21 21:12:55 147
原创 MySQL学习笔记——TCL(Transaction Control Language —— 事务控制语言)
目录概述什么是事务补充:存储引擎事务的特点(ACID属性)原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)事务的创建隐式事务和显式事务事务的创建步骤事务创建的演示事务并发事务并发时会产生的问题如何去避免回滚点概述什么是事务事务:一个或一组SQL语句组成一个执行单元,这个执行单元中的内容要么全部执行,要么全部不执行。详细解释:事务是由单独单元的一个或多个SQL语句组成,在这个单元中,每个SQL语句都是相互依赖的。而整个单独单元作为
2021-04-20 22:12:11 195
原创 MySQL学习笔记——标识列(自增长列)
目录概述特点创建表时设置标识列设置标识列的参数修改表时设置标识列修改表时删除标识列概述标识列又称为自增长列含义:可以不用手动的插入值,系统提供默认的序列值特点标识列不一定和主键搭配,但要求必须是一个key(主键、唯一、外键或自定义的key)一个表中最多只能有一个标识列标识列的数据类型只能是数值型创建表时设置标识列直接在约束条件后面加上auto_increment关键字往表中添加数据的时候,就可以不用填写(或填写null)标识列的值,该列的值会自动填写为自增长序列。设置
2021-04-20 18:00:43 121
原创 MySQL学习笔记——常见约束(外键、主键与唯一的对比、添加删除约束、外键的级联删除和级联置空)
目录概述创建表时添加约束添加列级约束添加表级约束通用的写法主键和唯一的对比外键的特点修改表时添加约束语法示例修改表时删除约束概述含义:一种限制,用于限制表中的数据,为了保证表中数据的准确性和可靠性(即一致性)分类:六大约束not null:非空,用于保证该字段的值不能为空(比如姓名、学号等)default:默认,用于保证该字段有默认值(比如性别等)primary key:主键,用于保证该字段的值具有唯一性,并且非空(比如学号、员工编号等)unique:唯一,用于保证该字段的值具有唯一性,可
2021-04-19 21:04:04 988
原创 MySQL学习笔记——DQL查询语句执行顺序
select 查询列表 7from 表1 别名 1连接类型 join 表2 别名 2on 连接条件 3where 筛选条件 4group by 分组列表 5having 分组后的筛选条件 6order by 排序列表 8limit 起始条目索引,条目数; 9...
2021-04-18 21:48:49 181
原创 MySQL学习笔记——SQL中常见的数据类型
目录SQL中常见的数据类型数据类型选择的原则整型特点案例小数分类特点字符型分类char和varcharchar和varchar的区别Enum(枚举类型)set类型日期型SQL中常见的数据类型数值型整型小数:定点数、浮点数字符型较短的文本:char、varchar较长的文本:text、blob(较长的二进制数据)日期型数据类型选择的原则所选择的类型越简单越好,能保存数值的类型越小越好整型特点如果不设置无符号,默认是无符号,如果要设置有符号,需要加unsigne
2021-04-18 21:38:28 563 3
原创 MySQL学习笔记——DDL(Data Define Language——数据定义语言)
目录概述库的管理库的创建库的修改库的删除表的管理表的创建(重点)表的修改修改列名修改表的类型或约束添加新列删除列修改表名表的删除表的复制仅仅复制表的结构复制表的结构+数据只复制部分表的结构和数据仅仅赋值部分表的结构,不复制数据概述作用:管理数据库与库中的表库的管理:创建、修改、删除表的管理:创建、修改(不是修改表中的数据,而是修改表的结构)、删除(不是删除表中的数据,而是删除整个表,即删除后表不再存在,无法再向表中添加数据。DML语言中的删除表是指清空表中的数据)关键字:(注意与DML语句
2021-04-15 20:30:52 201
原创 MySQL学习笔记——DML语言(数据操作语言)(增、删、改)
目录插入(insert)方式一语法特点修改(update)删除(delete)插入(insert)方式一语法insert into 表名(列名,...) values(值1,...);特点beauty表的字段插入的类型要与列的类型一致或兼容不可以为null的列必须插入值,可以为null的列(nullable)如果不想插入值,如何插入方式一:插入的值直接填null方式二:插入的字段和值都不填写修改(update)删除(delete)...
2021-04-14 20:31:13 246
原创 MySQL学习笔记——联合查询
目录概述特点概述关键字union:将多条查询语句合并成一个结果语法查询语句1union查询语句2union...比如查询部门编号>90或邮箱包含a的员工信息用之前的or关键字也可以实现使用union关键字应用场景:要查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致时特点要求多条查询语句的查询列数一致要求多条查询语句的所查询的每一列的类型和顺序保持一致union关键字结果是默认去重的,如果使用union all关键字,则结果包含重
2021-04-13 20:16:41 93
原创 MySQL学习笔记——分页查询
目录概述案例概述应用场景:当要显示的数据,一页显示不全,需要分页提交SQL请求语法:select 查询列表from 表【join type join 表2on 连接条件where 筛选条件group by 分组字段having 分组后的筛选order by 排序的字段】limit offset,size;案例查询前五条员工的信息...
2021-04-13 16:07:02 68
原创 java学习笔记——Comparator和Comparable
目录ComparableComparator注意ComparableComparable是排序接口如果一个类实现了Comparable接口,就说明该类支持排序。此外,实现Comparable接口的类的对象可以用作有序映射(如TreeMap)中的键或有序集合中的元素,而不需要指定比较器。Comparable接口所定义的顺序,叫做natural ordering。当向支持排序的集合中添加该类元素后,在对该集合排序时,就会调用comparaTo方法来进行natural ordering进行排序。接口中
2021-04-12 15:46:05 118
原创 MySQL学习笔记——子查询
目录概述分类(以套嵌查询语句为例)where或having后面的子查询特点标量子查询概述含义:出现在其他语句(可以是增删改查等任何语句)中的select语句,称为子查询或内查询如果是套嵌在查询语句中的子查询,那么外部的查询语句叫做主查询或外查询分类(以套嵌查询语句为例)按子查询出现的位置进行分类:select后面:仅仅只支持标量子查询from后面:支持表子查询where或having后面(重点):支持标量子查询、列子查询,也支持行子查询,但是用的较少exists后面(相关子查询)
2021-04-09 10:47:33 101
原创 MySQL学习笔记——外连接、交叉连接
目录概述案例概述应用场景:用于查询一个表中有,而另一个表中没有的记录特点:外连接的查询结果为主表中的所有记录如果从表中有和它匹配的,则显示匹配的值如果从表中没有和它匹配的,则显示null外连接的查询结果=内连接结果+主表中有而从表中没有的结果(显示为null)相当于把两个表合并,最后显示出来的合并后的表中,包含主表中所有的对象(每一行称为一个对象),而该对象如果在连接条件下没有对应的对象,那么在新表中该对象对应从表中的字段就为null例如把departments表作为主表,em
2021-04-08 15:52:30 76
原创 MySQL学习笔记——SQL99语法(内连接)
目录语法内连接等值连接非等值连接自连接语法select 查询列表from 表1 AS 别名 【连接类型】 join 表2 AS 别名on 连接条件【where 筛选条件】【group by 分组】【having 筛选条件】【order by 排序列表】连接类型:内连接:inner外连接左外:left (outer)右外:right (outer)全外:full (outer)交叉连接:cross内连接等值连接特点:可以添加排序、分组、筛选in
2021-04-07 21:18:45 153
原创 MySQL学习笔记——连接查询
目录概述笛卡尔乘积现象连接查询的分类各种连接方式举例(MySQL)等值连接特点简单举例为表起别名添加筛选条件添加分组条件添加排序实现三表连接非等值连接自连接概述含义:又称多表查询,当查询的字段来自于多个表的时候,就会用到连接查询笛卡尔乘积现象例如表1有m行,表2有n行,结果有m*n行,这种现象就叫做笛卡尔乘积现象发生原因:没有添加有效的连接条件如何避免:添加有效的连接条件连接查询的分类按年代分类sql92标准(即1992年推出的标准):MySQL中仅仅支持内连接sql99标准
2021-04-07 16:56:35 93
原创 MySQL学习笔记——分组查询
目录语法及特点语法特点案例说明简单的分组查询添加分组前的筛选条件添加分组后的筛选条件(having关键字)按表达式或函数分组按多个字段分组添加排序语法及特点语法select 分组函数,列(要求出现在group by的后面)from 表where 筛选条件group by 分组的列表order by 子句特点查询列表比较特殊,要求是分组函数和group by后出现的字段where关键字要出现在group by前面分组查询中的筛选条件分为两类:分组前筛选和分组后筛选分组函数做条件肯
2021-04-06 16:04:20 140
原创 MySQL学习笔记——常见函数
目录概念单行函数字符函数数学函数日期函数概念类似于java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名好处:隐藏了函数实现的细节提高了代码的重用性调用格式:select 函数名(参数列表) 【from 表】,其中from 表只有在参数列表中有表中的字段时才会使用分类:单行函数:如concat、length、ifnull等。分组函数:做统计使用,又称为统计函数、聚合函数、组函数单行函数字符函数length(参数):获取参数值的字节个数(中文在utf-8中占3个
2021-03-31 19:11:08 90
原创 MySQL学习笔记——查询语句(DQL)
目录基础查询基础查询语法及其特点基本的查询语句查询字段、常量、表达式、函数起别名去重SQL中‘+’的作用使用concat实现拼接细节补充基础查询基础查询语法及其特点语法:select 查询列表 from 表名;类似于java中的System out.println(打印的东西),其作用都是将需要的数据显示出来。特点:查询列表可以是:表中的字段、常量值、表达式、函数查询的结果是一个虚拟的表格基本的查询语句查询字段、常量、表达式、函数查询表中的单个字段查询表中的多个字段查
2021-03-29 21:40:54 184
原创 MySQL学习笔记——MySQL的基本操作
目录配置文件MySQL服务的启动和停止MySQL服务的登录和登出配置文件MySQL的主要配置文件在安装目录的my.ini文件里my.ini中的一些重要的配置MySQL服务的启动和停止方式一:计算机——右键管理——服务——找到MySQL(可以设置为自动启动)方式二:通过管理员的方式运行cmd启动服务:net start 服务名(服务名默认为默认为MySQL)停止服务:net stop 服务名MySQL服务的登录和登出方式一:通过MySQL自带的客户端(仅限于ro
2021-03-29 11:07:29 69
原创 MySQL学习笔记——(数据库概述)
目录什么是数据库数据库的相关概念数据库储存数据的特点什么是数据库数据库是储存数据的一种容器,它和储存数据的一些其它容器的作用一样,比如数组、集合、文件等等。但是它相较于其他容器,在储存大体量的数据时,有着十分明显的优势。首先对于数组和集合这种容器来说,它是将数据储存在内存中。这就产生了两个明显的缺点,第一,内存在断电时会造成数据的丢失,第二,内存所能储存的数据量过小。这种容器更适合那种程序运行时的临时变量数据,这种数据的体量较少,而且对速度要求高。而对于文件这种容器来说,它对文件操作的效率较低(比
2021-03-28 20:29:22 69
原创 java学习笔记——KMP字符串匹配算法
目录字符串匹配暴力解法KMP算法匹配字符串算法核心思想next数组字符串匹配暴力解法暴力解法的思想很简单,规定两个指针,一个指向目标字符串(target)规定为指针j,一个指向待匹配字符串(source)规定为指针i,需要在source中找到target字符串并返回开头索引。如果指针i和j指向的字符相同,就同时向后移动一旦两个指针所指的字符串不相同,指针i就重新指向target的开头,而指针j则指向source开始匹配的下一个字符,重复以上步骤。该解法虽然能够解决字符串的匹配
2021-03-23 18:18:53 73
原创 java学习笔记——多路查找树(B树、B+树、B*树)
目录二叉树存在的问题多叉树2-3树B树B+树B*树二叉树存在的问题二叉树需要加载到内存,如果二叉树的节点少,那自然没有什么问题。但是如果二叉树的节点很多(比如一个亿),就会存在如下问题:在构建二叉树是,需要多次进行i/o操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响节点海量,也会造成二叉树的高度很大,会降低操作的速度多叉树在二叉树中,每个节点都有自己的数据项,最多有两个节点。如果允许每个节点可以拥有更多的数据项和更多的子节点,这种树就叫做多叉树(multiwa
2021-03-18 15:31:56 77
原创 java学习笔记——平衡二叉树(AVL算法)
目录平衡二叉树AVL树的左旋转AVL树的右旋转AVL树的双旋转平衡二叉树平衡二叉树是对二叉排序树的一种改进二叉排序树:二叉树中的任何一个节点,它的左子树中所有的节点都比该节点要小,它的右子树中所有的节点都比该节点要大。(注意二叉排序树中应尽量避免重复的值,如果有重复的值,可以选择不插入,或者添加一个属性记录该值出现的次数,否则查找和删除的时候回出现麻烦)对于排序二叉树而言,如果输入的数组是一个有序的数列,那么最后生成的二叉树的结构会产生不平衡的情况(即所有节点都在树的一边),例如根据数组{1,2,
2021-03-17 17:49:40 306
原创 java学习笔记——赫夫曼编码
目录基本介绍通信领域中信息的常用处理方式定长编码变长编码基本介绍赫夫曼编码(Huffman coding),是一种编码方式,属于一中程序算法赫夫曼编码是赫夫曼树在电讯通信中的经典应用之一赫夫曼编码广泛的用于数据文件压缩。其压缩率通常在20%~90%之间。(文件内容的重复率越高,压缩率越大)赫夫曼编码是可变字长编码的一种,Huffman与1952年提出一种编码方式,被称之为最佳编码通信领域中信息的常用处理方式定长编码字符串(包括空格) --> ASCII码 --> 二进制编码
2021-03-14 20:08:15 66
原创 java学习笔记——赫夫曼树(最优二叉树)
目录赫夫曼树的定义与赫夫曼树相关的几个重要概念构成赫夫曼树的步骤代码实现赫夫曼树的定义给定n个权值作为n个叶子节点,构建一个二叉树,若该树的带权路径长度(wpl - weight path length)赫夫曼树是带权路径长度最短的树,权值较大的节点离根较近与赫夫曼树相关的几个重要概念路径:在一棵树中,从一个节点往下可以达到的孩子或孙子节点之间的通路,称为路径路径长度:通路中分支的数目称为路径长度。第 n 层的节点到第 m 层节点的路径长度为 m-n(比如规定根节点的层数为1,那么从根节点
2021-03-13 17:54:12 164
原创 java学习笔记(异常)
目录异常的概念异常的分类异常产生的过程解析异常的概念异常是指程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常终止。在java等面向对象语言的编程语言中,异常本身就是一个类,产生异常就是创建异常对象并抛出异常对象。java处理异常的方式是中断处理。异常指的并不是语法错误,对于语法错误,编译不会通过,不会产生字节码文件,根本不会运行。而异常是已经产生字节码文件,在运行期间出现的错误。异常的分类异常的机制是帮我们找到程序中的问题,异常的根类(父类)是java.lang.Trowa
2020-12-16 20:13:45 101
hourglass加速.rar
2021-03-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人