java
文章平均质量分 56
国足臭脚
这个作者很懒,什么都没留下…
展开
-
创建索引的原则
创建索引的原则1 选择唯一性索引,设在主键的列上,可以快速的通过该索引来确定某条记录。2 为需要经常排序、分组和联合操作的字段建立索引。经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作会浪费很多时间。如果为其建立索引,可以有效地避免排序操作。3 为经常需要根据范围进行搜索的列上4 在经常使用where子句的列上面创建索引5 在经常需要根据范围进行搜索的列上6 在经常需要搜索的列上对那些在查询中很少使用或者参考的列不应该创建索引对于那些很少数据值原创 2021-08-25 18:25:54 · 327 阅读 · 0 评论 -
索引失效的场景
1 or语句的前后没有同时使用索引。(or左右查询字段只有一个是索引,该索引失效)2 复合索引未使用左列字段,即不是使用的第一列索引,索引失效3 like 查询的时候 以%开头,索引无效4 存在索引列的数据类型隐形转换,则用不上索引,比如列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引5 where中在索引字段上使用not,<>,!=(不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描。key<>0 改为 key>0 or key&原创 2021-08-25 16:44:13 · 73 阅读 · 0 评论 -
左连接 右连接 自连接
左连接 : left join返回的是左表所有记录和右表连接字段相等的记录右连接:返回的是右表所有的记录和左表连接字段相等的记录内连接:只返回两个表中连接字段相等的行全外连接返回左右两个表所有的记录和表中连接字段相等的字段...原创 2021-08-25 13:22:19 · 69 阅读 · 0 评论 -
类的生命周期
类加载机制JVM把描述类的数据从class文件加载到内存,并对数据进行校验、准备、解析、初始化,最终形成JVM可以直接使用的Java类型的过程。类的加载过程加载:查找并加载类的二进制数据1 通过一个类的权限名来获取其定义的二进制字节流2 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构3 在Java堆中生成一个代表这个类的java.lang.Class对象,作为对方法区中这些数据的访问入口。连接验证确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机原创 2021-08-20 16:07:45 · 76 阅读 · 0 评论 -
用户线程和守护线程
1.用户线程和守护线程的区别 1.主线程结束后用户线程还会继续运行,JVM存活 2.如果没有用户线程,都是守护线程,那么JVM结束(所有的线程都会结束)2.用户线程和守护线程的适用场景 守护线程是一种特殊的线程,在后台默默地完成一些系统性的服务,比如垃圾回收线程、JIT线程都是守护线程。与之对应的是用户线程,用户线程可以理解为是系统的工作线程,它会完成这个程序需要完成的业务操作。如果用户线程全部结束了,意味着程序需要完成的业务操作已经结束了,系统可以退出了。所以当系统只剩下守护进程的时候,java虚原创 2021-08-02 16:56:13 · 103 阅读 · 0 评论 -
java复习垃圾收集器
1. Serial收集器单线程工作的收集器,Stop The World :它进行垃圾收集时, 必须暂停其他所有工作线程, 直到它收集结束2. ParNew收集器是Serial收集器的多线程版本3. Parallel Scavenge 收集器基于标记-复制算法实现的收集器 多线程 注重吞吐量 自适应调节4. Serial Old 收集器 Serial收集器的老年代版本, 它同样是一个单线程收集器, 使用标记-整理算法5. Parallel Old 收集器Parallel S原创 2021-08-02 15:40:14 · 84 阅读 · 0 评论 -
java复习之JVM
JVM JDK JRE 的关系JDK:Java Development Kit 是提供给java开发人员使用的,其中包含了Java的开发工具,也包括了JRE。所以安装了JDK,就无需再单独安装JRE了。其中的开发工具:编译工具(javac.exe),打包工具(jar.exe)等JVM:是Java虚拟机,Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机,因此Java语言可以实现跨平台。JRE:Java虚拟机和Java程序所需的核心类库等。核心类库主要是java.lang包:包含了运行Java程序原创 2021-08-01 15:26:12 · 148 阅读 · 0 评论 -
线程池的优势是啥
线程池的优势是啥1 线程是稀缺资源,使用线程池可以减少创建和销毁线程的损耗,每个工作线程都可以重复使用2 可以根据系统的承受能力,调整线程池中的工作线程的数量,防止消耗过多内存导致服务器奔溃线程池的创建1 使用工具类 Executors创建1 newSingleThreadExecutor: 创建一个单线程的线程池,这个线程池只有一个线程在工作。2 newFixedThreadPool : 创建一个固定大小的线程池,每次提交一个任务就会创建一个线程,直到线程达到线程池的大小3 newCache原创 2021-07-31 20:30:59 · 611 阅读 · 0 评论 -
常见的排序算法
常见的排序算法可以分为两大类: **非线性时间比较类排序**:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。算法的复杂度1 冒泡排序在无序的区间里通过相邻数的比较,将最大的数的冒泡到无序空间的最后,持续这个过程,让数组整体有序 /* * 冒泡排序 * 时间复杂度 为 O(n^2)原创 2021-07-30 16:01:48 · 90 阅读 · 0 评论 -
java多线程复习之synchronized
JVM中对象分为三部分对象头:Mark Word(标记字段):默认存储对象的HashCode,分代年龄和锁标志位信息。它会根据对象的状态复用自己的存储空间,也就是说在运行期间Mark Word里存储的数据会随着锁标志位的变化而变化。Klass Point(类型指针):对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。**实例变量:**这部分主要是存放类的数据信息,父类的信息。填充数据:于虚拟机要求对象起始地址必须是8字节的整数倍,填充数据不是必须存在的,仅仅是为了字节对齐原创 2021-07-29 17:18:22 · 185 阅读 · 0 评论 -
java复习之CAS
CAS原理什么是CASCAS是一条CPU并发原语,用于判断内存中某个位置的值是否为预期值,如果是则更改为新的值,如果不是就重新获取这个值再判断修改,这个过程是原子的。CAS机制中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。CAS原理CAS并发原语体现在Java中就是sun.misc.Unsafe类中的各个方法。调用UnSafe类中的CAS方法,JVM会帮我们实现CAS汇编指令。这是一套完全依赖于硬件的功能,通过它实现了原子操作。由于CAS是一种系统原语,原语属于操作系统用语,原原创 2021-07-29 15:33:23 · 79 阅读 · 0 评论 -
java复习多线程Volatile关键字
1 volatile关键字能保证可见性,代码重排序,但是不能保证原子性,只能修饰变量volatile关键字如何保证可见性当一个变量被volatile关键字修饰的时候,当它的值别修改的时候会立即从缓存中刷新到主内存中,其他线程如何监听这个值的时候,就会发现这个变量已经修改,会重新拉取主内存的值到缓存中。缓存一致协议 ;底层实现主要是通过汇编lock前缀指令,它会锁定这块内存区域的缓存(缓存行锁定)并写回到主内存中。volatile关键字为啥不能保证原子性如果一个变量被volatile修饰了,那么肯定可原创 2021-07-29 13:02:28 · 53 阅读 · 0 评论 -
抽象类和接口
抽象类:抽象类不能被实例化,要想使用只能创建该抽象类的子类,然后让子类重写抽象类中的抽象方法。抽象方法没有方法体(只声明,不实现,具体的实现要由子类实现)抽象类可以包含非抽象方法,也可以包含字段抽象方法必须是pubulic抽象类不能被实例化要用abstract关键字声明抽象类抽象类可以由构造器一个类只能继承一个抽象类abstract class shape { private String name; shape(String name){ this.原创 2021-07-27 13:00:31 · 42 阅读 · 0 评论 -
设计模式之单例模式
**单例模式:就是只有一个实例**,并且它自己负责创建自己的对象,这个类提供了一种访问其唯一对象的方式,可以是直接访问,不需要实例化该类的对象。一个类只能构建一个对象的模式。核心代码就是:构造方法私有化**1 懒汉模式用的时候才去检查有没有实例,如果有则返回,没有则新建public class Singleton { private Singleton(){} //私有构造函数 private static Singleton instance = null; //单例对象原创 2021-07-27 12:13:14 · 44 阅读 · 0 评论 -
HashMap
HashMapHashMap是hash表的一种实现,数据采用键值对的方式存储,解决冲突采用的是链地址法,当有数据发生冲突时,将冲突的部分链接成链表。HashMap是一种数据结构,可以快速的帮我们存取数据,在jdk1.7的时候采用的是数组加链表的形式,1.8之后采用的是数组加链表还有红黑树的形式,当链表个数大于8个时候就会变成红黑树,如果长度降到7之后又会变成链表,黑树的出现解决了因为链表过长导致查询速度变慢的问题,因为链表的查询时间复杂度是O(n),而红黑树的查询时间复杂度是O(logn)。Hash原创 2021-07-25 22:22:14 · 105 阅读 · 0 评论 -
在浏览器输入一个url按下回车会发生什么
回答一URL,统一资源定位符,l简单点就是网址=ip或域名 + 端口号 + 资源位置 + 参数 + 锚点1.输入一个网址之后,首先浏览器通过查询DNS,查找这个URL的IP地址,(通过层层向上级DNS服务器查找直到找到对应URL的IP地址)2.得到目标服务器的IP地址及端口号(http 80端口,https 443端口),会调用系统库函数socket,请求一个TCP流套接字。客户端向服务器发送HTTP请求报文(1)应用层:客户端发送HTTP请求报文。(2)传输层:(加入源端口、目的端口)建立连原创 2021-07-25 18:04:23 · 214 阅读 · 1 评论 -
面向对象的三大特征
封装隐藏对象的属性和实现细节,仅对外提供公共的访问方式,将变化隔离,便于使用,提高复用性和安全性继承继承是多态的前提使用extends 指定父类java一个类只能继承一个父类子类可以继承父类所有非private的属性和方法子类也可以拥有自己的方法和属性多态多态是指:程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编译时候并不明确,而是要等程序运行的时候才知道,*即一个引用变量会指向那个类的实例对象,该引用调用的方法到底是那个类的方法,必须有程序运行时候才能决定。*实现原创 2021-07-25 18:00:15 · 49 阅读 · 0 评论 -
重载和重写的区别
两者的区别:方法是重载和重写都是实现多态的方式,区别在于前者是实现编译时候的多态性,后者是实现运行时候的多态性重载:发生在一个类里面,方法名称相同,参数列表不同(参数类型不同,个数不同,顺序也不同),与方法的返回值和访问修饰符无关,即重载不能根据方法的返回类型进行区分。重写:发生在父子类中,方法名,参数列表必须相同,返回值小于或者等于父类,访问修饰符大于等于父类,如果父类的方法访问修饰符为private就不能被子类重写。构造器是否可被重写构造器不能继承,所以就不能被重写,但是可以重载。方法重载的原创 2021-07-25 17:10:16 · 51 阅读 · 0 评论 -
Mysql 的优化
Mysql的优化方式选取合适的字段属性使用连接来代替子查询使用联合来代替手动创建的临时表事务锁定表外键使用索引优化查询语句原创 2021-07-24 19:05:20 · 55 阅读 · 0 评论 -
MYSQL的锁
锁的分类select .... for update -- 会使用行级锁表级锁锁的是一张表,锁的颗粒度最大,发生锁冲突的概率最大,不会发生死锁,并发度底表级锁有两种一种是表锁一种是元素锁*表锁有两种表现形式表共享读锁表独占写锁元数据锁 MDL 元数据当对一个表做增删改差操作的时候,加MDL读锁;当要对表做结构变更操作的时候加MDL写锁;行级锁每次锁的是一行数据,锁定的粒度最小,发生锁冲突的概率最低,并发度最高。可能会发生死锁应用在InnoDB的存储引擎中行锁:原创 2021-07-23 22:54:16 · 58 阅读 · 0 评论 -
mysql 如何设计一个数据库
糟糕的数据库设计数据冗余,浪费空间数据库插入和删除都比较麻烦程序的性能差良好的数据库设计节省空间保证数据库的完整性方便我们开发系统软件开发中关于数据库的设计分析需求:分析业务和需求处理的数据库的需求概要设计:设计关系图E-R图设计数据库的步骤(个人博客)1 收集信息,分析需求用户表(用户登录注销,用户的个人信息 写博客,创建分类 )分类表(文章分类,谁创建的)文章表(文章的信息)有链表(友练信息)自定义表(系统信息,某个关键字,或者一些字段) key : va原创 2021-07-23 20:42:51 · 494 阅读 · 0 评论 -
java复习 事务
数据库怎么存放数据 : 先把数据放到表里 再把表放到数据库里一个数据库可以有多个表 表名字不能相同表有一些特征,这些特性定义了数据库在表中如何存储表由列组成,我也成为字段所有表都是由一列或者多列组成的表中的数据是按行存储的什么是事务(Translation)数据库的事务是指一组sql语句组成的数据库逻辑处理单元,在这组的sql操作中,要么全部执行成功,要么全部执行失败事务是一个不可分割的数据库操作序列,也就是数据库控制并发控制的基本单位;组成: 一个数据库事务通常包含对数据库进行读和写的一个原创 2021-07-23 17:34:13 · 80 阅读 · 0 评论 -
关系型数据库 和 非关系型数据库
什么是关系型数据库?系型数据库指的是使用关系模型(二维表格模型)来组织数据的数据库。什么是关系模型关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。常见的关系型数据库管理系统MysqlSQLiteOracleIBM DB2关系型数据库的优势?采用二维表结构非常贴近正常开发逻辑支持通用的SQL语句丰富的完整性大大减少了数据冗余和数据不一致的问题。并且全部由表结构组成,文件格式一致;可以用SQL句子多个表之间做非常繁杂的查询关系原创 2021-07-23 16:31:29 · 960 阅读 · 0 评论 -
数据结构 — 二叉树的详解与实现
1 树型结构1.1 概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树 。1.2 树的概念节点的度: 一个节点含有的子树的个数称为该节点的度; 如上图 A的度为6.树的度: 一棵树中,最大的节点的度称为树的度; 如上图:树的度为原创 2021-07-22 20:20:19 · 90 阅读 · 0 评论 -
java复习 数据库 索引
索引是啥? index索引是一种能帮助MYSQL提高查询效率的数据结构索引是一种特殊的文件,包含这对数据库表里所有记录的引用指针索引是一种数据结构。数据库的索引是数据库管理系统中一个排序的数据结构,以协助快速查询,更新数据库表中的数据。索引的通常实现使用B树或者B+树通俗的说索引就是一个目录,表相当于书,数据相当于书里的内容,通过内容建立索引形成目录索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。索引的优势大大的加快数据的查询速度索引的缺点1 维护索引耗费数据库资源2 索原创 2021-07-22 19:28:48 · 270 阅读 · 0 评论 -
HsahMap如何实现顺序读取?
用LinkedHashMap : LinkedHashMap是HashMap的子类HashMap是无序的,简单来说LinkedHashMap是一个有序的HashMap。LinkedHashMap提供的节点添加了两个属性before和after节点,用来生成双向循环列表的,这样每次在Map中添加值都会追加到链表的最后一位,这样就按照插入顺序生成了一个链表LinkedHashMap实现有序key值的关键就是根据插入顺序另外维护了一个按照插入顺序作为标记的双向循环列表,这样在获取所有数据进行循环获取时获取到的原创 2021-07-22 16:38:36 · 363 阅读 · 0 评论 -
java复习之网络 —— 网络层 和 数据链路层
网络层:复杂的网络环境中确定一个合适的路径,负责提供基本的数据传送功能,负责地址管理和路由器的选择IP协议P地址分为两个部分, 网络号和主机号网络号: 保证相互连接的两个网段具有不同的标识;主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;网段的划分可见,IP地址与子网掩码做与运算可以得到网络号, 主机号从全0到全1就是子网的地址范围;IP地址和子网掩码还有一种更简洁的表示方法,例如140.252.20.68/24,表示IP地址为140.252.20.68, 子网原创 2021-07-19 12:45:50 · 102 阅读 · 0 评论 -
Java中的数组
什么是数组数组的本质是存放相同类型的数据的集合,数组的内存是连续的,数组可以通过下标来访问其中的元素。创建一维数组定义一个数组的同时经行初始化。动态初始化数据类型 [ ] 数组名称=new 数据类型 [ ] { 初始化数据 };代码示例int[] arr= new int[] {1,2,3}静态初始化数据类型 [ ] 数组名称= {初始化数据} 代码示例int [ ...原创 2019-10-20 17:34:42 · 120 阅读 · 0 评论