
学习笔记
文章平均质量分 82
箱水母
这个作者很懒,什么都没留下…
展开
-
计算机网络
计算机网络原创 2021-09-27 11:00:43 · 265 阅读 · 0 评论 -
线程---JUC
JUCJUCCallableLock锁JUCJava真的可以开启线程吗?开不了的,底层是用native关键词修饰,调用本地实现。并发编程的本质: 充分利用CPU的资源Callable普通的线程代码,之前都是用的thread或者runnable接口。但是相比于callable来说,thread没有返回值,且效率没有callable高。与Runnable区别:1、可以有返回值2、可以抛出异常3、方法不同,分别是call()和run()public class CallableDemo原创 2021-09-27 10:38:05 · 190 阅读 · 0 评论 -
JVM---垃圾回收
垃圾回收关于垃圾回收什么是垃圾为什么需要GCGC 的作用区域垃圾回收相关算法标记阶段引用计数算法引用计数算法特点可达性分析算法(根搜索算法、追踪性垃圾收集)可达性分析算法基本思路GC Roots可以是哪些元素?可达性分析算法的注意事项对象的 finalization 机制清除阶段标记-清除算法(Mark-Sweep)标记-清除算法的缺点复制算法复制算法的优缺点复制算法的应用场景标记-压缩算法(标记-清除-压缩(Mark-Sweep-Compact)算法)标记-压缩算法的执行流程标记-压缩算法的优缺点标记-压原创 2021-09-16 15:44:01 · 217 阅读 · 0 评论 -
数据库---redis---缓存穿透,缓存击穿,缓存雪崩,缓存预热
缓存穿透,缓存击穿,缓存雪崩,缓存预热缓存处理流程缓存穿透解决缓存击穿解决缓存雪崩这个没有完美解决办法缓存预热缓存处理流程前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。缓存穿透缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求。如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。解决实际开发中使用情况,数据库中80%-85%都存放到red原创 2021-09-15 16:47:34 · 224 阅读 · 0 评论 -
数据库---Redis
RedisRedis关系型数据库和非关系型数据库Redis简介RedisRedis可以用在查询一些不经常发生变化的数据。缓存的思想:首先从Redis中取数据:1、Redis中有:直接返回2、Redis中没有:(1)从数据库中查询(2)将数据放到Redis缓存中(3)返回数据关系型数据库和非关系型数据库可以理解为一个大的Map结构,那为什么不直接使用Map呢?内存中缓存的选择有很多,可以使用Map集合,但是Map集合只能当前项目使用,但是要做分布式的部署有多台电脑的话Map集合就不原创 2021-09-15 16:37:15 · 113 阅读 · 0 评论 -
数据库---数据库索引及优化
数据库索引及优化索引(Index)==提高效率==索引的优缺点:优点缺点MySQL索引几种索引类型:MySQL的索引结构B 树B+ 树B+ 树和 B 树有什么不同哈希索引(Hash索引)聚集索引 VS 非聚集索引:覆盖索引(Covering Index,索引覆盖)索引的创建、删除和查看==索引的使用场景==需要创建索引的情况不需要创建索引的情况SQL中的逻辑删除和物理删除二者的区别:逻辑删除的目的==索引优化、Sql优化==索引(Index)提高效率如果没有索引,那么需要进行全表扫描,会非常慢,当数据原创 2021-09-15 16:32:41 · 342 阅读 · 0 评论 -
数据库---数据库的存储引擎
数据库的存储引擎存储引擎常用的表的引擎如何查看及设置数据库引擎存储引擎常用的表的引擎Myisam ,批量插入速度快, 不支持事务,锁表Innodb, 批量插入相对较慢,支持事务,锁行. (默认)如何查看及设置数据库引擎1、show engines;可以看到如下结果:2、如何更改默认数据库引擎找到MySQL配置文件mysql.ini,首先将其备份(这是个好习惯,当需要更改Linux上配置文件时)即cp mysql.ini mysql.ini.bak在[mysqld]后面添加defa原创 2021-09-15 15:34:53 · 130 阅读 · 0 评论 -
数据库---三范式
三范式数据库设计三范式(3NF)第一范式(1NF)原子性第二范式(2NF)唯一性第三范式(3NF)独立性总结数据库设计三范式(3NF)范式,就是规范,就是指设计数据库需要(应该)遵循的原则。每个范式,都是用来规定某种结构或数据要求——后一范式都是在前一范式已经满足的情况用来“加强要求”。但是并不一定要遵守。第一范式(1NF)原子性原子性:存储的数据应该具有“不可再分性”。不良做法: (图是找的)应该:(图是找的)第二范式(2NF)唯一性唯一性 :消除非主键依赖联合主键中的部分字段。原创 2021-09-15 15:26:39 · 1452 阅读 · 1 评论 -
数据结构---二叉树
二叉树树定义度结点的关系层次深度==二叉树==定义特点性质斜树满二叉树树定义树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一颗非空树中:1)有且仅有一个特定的称为根(Root)的结点;2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、…、Tn,其中每一个集合本身又是一棵树,并且称为根的子树。此外,树的定义还需要强调以下两点:1)n>0时根结点是唯一的,不可能存在多个根结点,数据结构中的树只能有一个根结点。2)m>0时原创 2021-09-15 15:05:19 · 562 阅读 · 0 评论 -
数据库---视图,索引,事务,存储过程,触发器,char和varchar
视图,索引,事务,存储过程,触发器,char和varchar视图作用示例注意事务视图视图就是将这个查询返回的结果集起了一个名字保存起来,视图就是临时存储数据构成的一张表。不是一个真正的表,但是我们使用时候可以当成一张表来使用。作用简化查询进行权限控制,比如公司的货物信息需要与合作的公司共享,不想让他知道全部的信息并能进行更改。视图可以把表的增删改查的权限封闭,只开放相应的视图权限,视图里面只是有我们想开放的数据。示例-- 查询每个栏目下面商品的平均价格,并按照平均价格排序,-- 查询平原创 2021-09-14 17:19:39 · 595 阅读 · 0 评论 -
数据库---事务
事务事务简介数据库开启事务的命令结束事务书写结构实例*事务四个基本特征或 ACID 特性:Spring的事务传播特性(属性、机制)事务简介事物是指逻辑上的一组操作,组成这组操作的各个单元,要么全部执行成功,要么全部实行失败。例如:张三–李四转账-- 事物CREATE TABLE account( id INT PRIMARY KEY auto_increment, `name` VARCHAR(10), money DOUBLE);INSERT INTO accou原创 2021-09-13 15:04:38 · 607 阅读 · 0 评论 -
框架---SSM集合,Maven
SSM集合原创 2021-09-11 18:47:26 · 266 阅读 · 1 评论 -
框架---SpringAOP,代理模式
SpringAOP,代理模式SpringAOP代理模式静态代理静态代理优缺点动态代理(JDK代理)SpringAOPAspect Oriented Programming 面向切面编程Object Oriented Programming面向对象编程拦截器、过滤器都是基于代理模式代理模式静态代理让目标对象和代理类实现同一个接口,目的是让客户端访问的时候行为是一致。这其实就是一种保护(对目标对象的保护),控制对具体目标对象的访问,这个时候就由代理说了算。在代理对象里面转调目标对象之前和之原创 2021-09-11 14:42:41 · 287 阅读 · 0 评论 -
集合框架--2、哈希表、hashCode、equals、HashMap
哈希表、hashCode、equals、HashMap散列表(Hash table,也叫哈希表)通常用的处理冲突的方法:hashCode方法:当向集合中插入对象时,如何判别在集合中是否已经存在该对象了?哈希表什么是容量Hash Set底层就是通过HashMap实现的,HapMap底下又是由哈希表实现的。散列表(Hash table,也叫哈希表)它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意原创 2021-09-10 17:05:33 · 301 阅读 · 0 评论 -
集合框架--List,Set,Map
List,Set,Map集合的继承实现关系Collection接口概述创建集合的格式示例Iterator迭代器List接口特点(也是所有实现类的特点)ArrayListConcurrentModificationException迭代器的并发修改异常Set接口HashSet集合的继承实现关系Iterator迭代器,下面所有的都可以用迭代器来遍历。Collecton接口常用的子接口有:List接口、Set接口。List接口常用的子类有:ArrayList类、LinkedList类。Set接口常用原创 2021-09-10 16:34:09 · 938 阅读 · 1 评论 -
框架---SpringBoot
SpringBootSpringBoot什么是SpringBootSpringBoot特点SpringBoot的核心功能开发创建添加SpringBoot的起步依赖整合成MyBatis在pom.xml中加入需要jar包配置文件中添加:application.propertiesApplication中添加:@MapperScan("springboot.mapper")转发到jsp拦截器配置拦截器SpringBoot传统Spring开发缺点:1、Spring的配置比较繁琐2、SSM中jar包的版本依赖原创 2021-09-08 21:18:33 · 684 阅读 · 0 评论 -
框架---Spring IOC
Spring IOCSpring工厂Spring框架Spring工厂1、方便解耦,简化开发,IOC控制反转Spring 就是一个大工厂,可以将所有对象创建和依赖关系维护交给Spring2、AOP 编程的支持Spring 提供面向切编程,可以方便的实现对序进行权限拦截、运监控等功能3、声明式事务的支持(张三给李四转账,要么同时成功,要么同时失败)只需要通过配置就可以完成对事务的管理,而无手动编程4、方便集成各种优秀框架Spring 不排斥各种优秀的开源框架,其内部提供了对各种优优秀框架的原创 2021-09-07 17:55:52 · 87 阅读 · 0 评论 -
编程---三层架构
三层架构不同于MVC三层:Controller控制层,封装对象Service 业务层,业务逻辑(1)获取已存在的所有用户(2)通过遍历得到每一个用户信息然后育新用户进行比较(3)结果已存在就不再注册,不存在就注册Dao数据访问层,基本的增删改查Controller:接收前台传递过来的数据,对数据进行封装,然后交给Service层完成业务逻辑,Service层可以调用Dao层完成增删改查在三层架构里面是面向接口编程,Service层能够为Controller层提供的所有功能都写到Ser原创 2021-09-04 13:46:49 · 529 阅读 · 0 评论 -
框架---MyBatis---动态Sql
MyBatis 动态Sql动态Sqlwhere-if标签set-if标签foreach标签choose、when、otherwise动态Sql通过MyBatis提供的各种标签方法实现动态拼接Sql。这些标签类似于JSTL标签,可以写控制语句动态的拼接Sql。where-if标签用于查找语句。如果输入的时候添加了属性,if标签生效;如果if标签里的内容是添加的第一个会自动把其中的and去掉。@Test public void testIfWhere(){ SqlSessi原创 2021-09-04 11:23:09 · 256 阅读 · 0 评论 -
框架---MyBatis---多表
MyBatis多表一对一一对多多对多一对一一个学生只属于一个班级。MyBatis中使用association标签解决一对一关联查询,association标签可以使用的属性如下:property:对象属性的名称javaType:对象以昂属性的类型column:数据库中字段的名称(也可能是起的别名)最终返回的是一个学生的集合,但是Student里面是有一个banji对象,里面保存了这个学生对应的班级信息。<mapper namespace="student"> <resul原创 2021-09-04 11:02:42 · 209 阅读 · 0 评论 -
框架---MyBatis---简介
MyBatisMyBatismybatis框架运行流程Student实体类mybatis.xml基本配置下划线字段对应实体类驼峰命名配置别名StudentMapper.xml示例MyBatis像MyBatis、Hibernate都是属于ORM框架。mybatis框架运行流程POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBean。SqlSession就是会话,类似于jdbc里面的Connection,开启了这次会话,就可以发送增删改查的操原创 2021-09-02 20:59:32 · 492 阅读 · 0 评论 -
框架---SpringMVC
SpringMVCSpringmvc是什么web.xmlspringmvc.xml示例添加在业务逻辑中收集数组JSON数据封装:GET和POST乱码转发和重定向@RequestParam注解视图解析器拦截器Springmvc是什么Springmvc是spring框架的后续产品,用在基于MVC的表现层开发,类似于struts2框架。一般的项目:SSM+SpringBoot+IDEA+Git+SpringCloud+RedisSpringmvc依赖于Core(IOC),Springmvc需要导入Core原创 2021-09-01 21:09:45 · 324 阅读 · 0 评论 -
注意---Java数组的打印
Java数组的打印数组的输出的三种方式一维数组二维数组数组的输出的三种方式一维数组定义一个数组 int[] array = {1,2,3,4,5};(1)传统的for循环方式for(int i=0;i<array.length;i++){System.out.println(array[i]);}(2)for each循环for(int a:array)System.out.println(a);(3)利用Array类中的toString方法调用Array.toStrin转载 2021-08-31 18:35:53 · 160 阅读 · 0 评论 -
Servlet---ECharts
ECharts用ECharts在页面中插入图表用ECharts在页面中插入图表网站网址<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>Title</title> <meta charset="utf-8"> <!-- 引入 ECharts 文件 --></hea原创 2021-08-31 14:37:50 · 356 阅读 · 0 评论 -
知识点---JVM---方法区
方法区栈 堆 方法区的交互关系方法区的理解方法区演进过程设置方法区大小与 OOMJDK8 版本设置元空间大小方法区的内部结构类型信息:域(Field)信息:方法(Method)信息全局常量:static final运行时常量池常量池:总结运行时常量池==方法区演进细节(非常重要)==永久代为什么要被元空间替代?运行时数据区总结栈 堆 方法区的交互关系1、Person 类的 .class 信息存放在方法区中。2、person 变量存放在 Java 栈的局部变量表中。3、真正的 person 对象存放在原创 2021-08-30 19:01:24 · 164 阅读 · 0 评论 -
知识点---JVM---堆
堆堆的核心概述设置堆内存大小与 OOM如何设置堆内存大小年轻代与老年代配置新生代与老年代的比例(一般不会调)新生区中的比例图解对象分配过程总流程Minor GC、Major GC、Full GC部分收集整堆收集(Full GC)年轻代 GC(Minor GC)触发机制老年代 GC(MajorGC/Full GC)触发机制堆空间分代思想TLAB:Thread Local Allocation Buffer问题:堆空间都是共享的么?为什么有TLAB(Thread Local Allocation Buffer)原创 2021-08-30 18:46:28 · 476 阅读 · 0 评论 -
知识点---JVM---虚拟机栈
虚拟机栈虚拟机栈概述内存中的栈与堆Java虚拟机栈是什么?虚拟机栈的生命周期虚拟机栈的作用栈的特点相关问题栈中可能出现的异常设置栈内存的大小栈的存储单位栈存储什么?栈的运行原理栈的内部结构局部变量表静态变量与局部变量的对比:操作数栈==动态链接(或指向运行时常量池的方法引用)==为什么要用常量池呢?方法返回地址一些附加信息:相关问题虚拟机栈概述内存中的栈与堆首先栈是运行时的单位,而堆是存储的单位栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放,放哪里原创 2021-08-30 18:10:05 · 484 阅读 · 0 评论 -
知识点---JVM---线程、程序计数器(PC寄存器,Program Counter Register)
线程、数据计数器线程线程的内存空间JVM 线程PC 寄存器PC 寄存器的作用线程**每个JVM都有Runtime类,且只有一个Runtime实例。**即为运行时环境,相当于内存结构的中间的那个框:运行时环境。线程的内存空间Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区:其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与线程一一对应的,这些与线程对应的数据区域会随着线程开始和结束而创建和销毁。灰色的为单独线程私有的,红色的为多个线程共享的:1. 线程原创 2021-08-30 15:22:45 · 872 阅读 · 0 评论 -
知识点---设计模式---简单工厂
简单工厂简单工厂引导简单工厂模式简单工厂引导面向对象的好处:通过封装、继承、多态把程序的耦合度降低。就像是:传统印刷术的问题就在于所有的字都刻在同一版面上造成耦合度太高,活字印刷术就更加灵活。开始用设计模式使得程序更加灵活,易于修改,并且易于复用。当所有方法集中在一个类里,比如:public class Opeartion { /* * 1 +, 2 - */ public static double getResult(double原创 2021-08-28 15:01:56 · 308 阅读 · 0 评论 -
知识点---JVM---类加载器
类加载器类加载器作用类加载器子系统作用类加载器ClassLoader作用类加载过程加载阶段:加载流程:加载class文件的方式:链接阶段:验证(Verify):准备(Prepare):解析(Resolve):类加载器作用类加载器子系统作用1. 类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。2. ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。3. 加载的类信息存放于一块称为方法区的原创 2021-08-28 11:04:46 · 538 阅读 · 0 评论 -
知识点---JVM---JVM简介
JVM简介为什么要学习JVM?JVM跨平台Java虚拟机简介作用:特点:JVM位置==JVM架构==(要能画出来)JVM整体结构:JVM的架构模型JVM 架构总结JVM 生命周期为什么要学习JVM?深入的理解Java这门语言。更好的解决线上排查问题(更好的解决生产线问题)走向高级程序员和架构师的必经之路JVM跨平台Java是高级语言,但是真正的执行需要最终转换成机器指令才能执行:首先.java文件经过编译成为.class文件(字节码文件),然后将编译好的字节码文件放到虚拟机中就可以执行了。原创 2021-08-27 17:20:20 · 323 阅读 · 1 评论 -
知识点---反射
反射定义引导首先要拿到Class获得字节码文件Constructor的反射:可以调用private的属性和方法实例利用反射加配置文件加载指定数据库定义在编译时候不知道加载的是哪个类,在运行时可以动态的获取类的属性调用对象的方法的机制就叫做反射。反射使Java这种静态编译型的语言具有了动态性。反射具有看透类的能力,类的信息在反射面前都是透明的(包括private的属性和方法都是可以调用)。Java反射机制主要提供一下功能:1、在运行时判断任意一个对象所属的类。2、在运行时构造任意一个类的对象。原创 2021-08-26 21:32:39 · 665 阅读 · 0 评论 -
知识点---运算符&与&&,|与||的区别、进制转换
运算符&与&&,|与||的区别、进制转换运算符&与&&,|与||的区别进制转换十进制转换为X进制转换为二进制运算符&与&&,|与||的区别&和 | 既是逻辑运算符也是位运算符,而&&和||只是逻辑运算符。&&是逻辑与运算符,||是逻辑或运算符,都是逻辑运算符,两边只能是bool类型&与| 既可以进行逻辑运算,又可以进行位运算,两边既可以是bool类型,又可以是数值类型if (A原创 2021-08-26 20:58:20 · 251 阅读 · 0 评论 -
知识点---递归
递归定义递归算法解决问题的特点:示例:阶乘定义递归算法是一种直接或者间接调用自身函数或者方法的算法。递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解。递归算法,其实说白了,就是程序的自身调用。它表现在一段程序中往往会遇到调用自身的那样一种coding策略,这样我们就可以利用大道至简的思想,把一个大的复杂的问题层层转换为一个小的和原问题相似的问题来求解的这样一种策略。递归往往能给我们带来非常简洁非常直观原创 2021-08-26 20:35:56 · 1194 阅读 · 0 评论 -
知识点---设计模式---单例模式
单例模式单例模式单例应用场景步骤饿汉式懒汉式懒汉式的改进改进的原因改进:**双重检查加锁**单例模式单例模式(Singleton)保证一个类仅有一个实例,并提供一个访问他的全局访问点。保证类仅有一个实例最好的办法就是,让类自身负责保存他的唯一实例。这个类可以保证没有其他实例被创建,并且他可以提供一个访问该实例的方法。单例模式保证只有一个实例,就要保证外界不能随便的new这个对象,所以要私有化构造方法。私有化构造方法后就是把new这个对象控制权收回了,只能在类内部去实例化这个对象,让类自身负责保存他的原创 2021-08-25 11:48:35 · 190 阅读 · 0 评论 -
知识点---线程---线程池
线程池线程池为什么要使用线程池?线程池相关参数的概念:线程池的关闭问题线程池线程池,其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。为什么要使用线程池?在java中,如果每个请求到达就创建一个新线程,开销是相当大的。在实际使用中,创建和销毁线程花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多。除了创建和销毁线程的开销之外,活动的线程也需要消耗系统资源。如果在一个jvm里创建太多的线程,可能会原创 2021-08-24 18:43:48 · 324 阅读 · 0 评论 -
知识点---线程---Java多线程状态
Java多线程状态wait set 线程的休息室wait()图解notify()图解Notify后的线程Notify如何选择线程notifyAll()调用notify方法还是notifyAll方法状态问题wait set 线程的休息室每个实例都有个线程的休息室wait set。wait()如欲执行wait()方法,线程需获取锁定synchronized(这是规则)。但是当线程进入wait set时,已经释放了该实例的锁定。图解notify()使用notify()(通知)方法时,可以从wai原创 2021-08-24 18:37:46 · 321 阅读 · 0 评论 -
知识点---线程---进程、线程
进程、线程定义进程线程关系创建线程直接继承Thread实现Runnable接口定义进程是具有一定独立功能的程序、它是系统进行资源(内存)分配和调度的一个独立单位,重点在系统调度和单独的单位,也就是说进程是可以独 立运行的一段程序。线程线程是进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源。关系1、一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程(通常说的主线程)。2、资源分配给进程,同一进程的所有线程共享该进原创 2021-08-24 18:03:56 · 966 阅读 · 0 评论 -
知识点---I/O流
I/O流分类分类处理数据类型不同分为:字节流和字符流流向不同分为:输入流和输出流原创 2021-08-23 18:21:26 · 505 阅读 · 0 评论 -
JavaScript---EL、JSTL语句
EL、JSTL原创 2021-08-20 20:48:48 · 254 阅读 · 0 评论