自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SQL优化

12、mysql中的浮点型用什么类型存浮点类型用float(4字节)和double,整形用int(4字节)bigint(8字节)decimal:数字型,128bit,不存在精度损失,常用于银行帐目计算。(28个有效位)13、SQL注入和如何防止,Mybatis中是如何防止#,$。sql 注入是由于用户的输入未经充分检查,被编译成了代码被执行。而具体到 SQL 注入来说,被执行的恶意代码是通过数据库的 SQL 解释引擎编译得到的,所以只要避免用户输入的数据被数据库系统编译就可以了。解决方法:P

2021-12-06 19:33:18 608

原创 mysql索引

1、什么是索引索引是一种数据结构,数据库索引,就是数据库管理系统中一个排序的数据结构,以协助快速查询,更新数据库中的数据,索引的实现通常使用B树和B+树。2、索引类型(1)主键索引:数据列不允许重复,不允许为null,一个表只能有一个主键(2)二级索引:辅助索引,因为二级索引的叶子节点存储的数据是主键,也就是说通过二级索引,可以查找到主键的位置。(3)唯一索引:索引列中的值必须是唯一的,但是允许为空值。唯一索引和主键索引的区别是:唯一约束的列可以为null且可以存在多个null值。唯一索引的用途:

2021-12-06 19:30:51 156

原创 mysql分库分表

当单表的数据量达到1000W或100G以后,优化索引、添加从库等可能对数据库性能提升效果不明显,此时就要考虑对其进行切分了。切分的目的就在于减少数据库的负担,缩短查询的时间。限定数据的范围: 务必禁止不带任何限制数据范围条件的查询语句。比如:我们当用户在查询订单历史的时候,我们可以控制在一个月的范围内。读/写分离: 经典的数据库拆分方案,主库负责写,从库负责读;垂直分区: 根据数据库里面数据表的相关性进行拆分。 例如,用户表中既有用户的登录信息又有用户的基本信息,可以将用户表拆分成两个

2021-12-06 19:21:53 642

原创 JVM内存以及作用

1、JVM的主要组成部分及其作用(1)Class loader(类装载):根据给定的全限定名类名(java.lang.Object)来装载class文件到运行时数据区的方法区(2)Execution engine(执行引擎):执行classes中的指令(3)Native Interface(本地接口):与native libraries交互,是其它编程语言交互的接口。(4)Runtime data area(运行时数据区):JVM内存**作用:**首先通过编译期把java源码转化成字节码,类加载

2021-11-29 20:14:37 329

原创 并发关键字

1、并发关键字synchronized在java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行。synchronize可以修饰类,方法,代码块,在早起版本,属于重量级锁。2、synchronized关键字的三种使用方法synchronized关键字加到实例方法上是给对象加锁。synchronized关键字加到static静态方法是给class类加锁。synchronized关键字修饰代码块上,就可以给对象sy

2021-11-27 22:01:52 3597

原创 CAS和AQS

1、CAS是乐观锁,在concurrentHashmap中的putval方法中会用到CAS非阻塞的实现CAS:CAS指令需要3个操作数,分别是内存地址(在JAVA中理解为变量的内存地址,用V表示),旧的预期值(用A表示),新值(B)。CAS指令执行时,当且仅当V处的值符合旧预期值A时,处理器用B更新A值,否则它就不执行更新,但是无论是否更新了V处的值,都会返回V的旧值,上述的处理过程是一个原子操作。CAS缺点 :ABA问题:因为CAS需要在操作值的时候检查下值有没有发生变化,如果没有发生变化则更新,但是

2021-11-27 21:06:12 3122

原创 线程池来了

1、线程池的核心属性有哪些newFixedThreadPool:固定大小的线程池,每次提交一个任务就创建一个线程,直到达到最大线程数。一旦达到最大池就不会改变,如果有一个线程执行异常结束,线程池会补充一个新线程。newCachedThreadPool:创建一个可缓存的线程池。如果线程池大小超过需要处理线程的数量,那么就会回收空闲的线程。任务增加时,线程池会创建新的线程。线程池不会限制数量大小,完全依赖于JVM能够创建的最大线程大小。newSingledThreadExecutor: 创建一个单线程话

2021-11-27 17:49:12 138

原创 线程创建的方式

1、什么是进程,什么是线程,进程与线程的区别和联系?(1)进程是操作系统资源分配和管理的基本单位,而线程是处理器任务调度和执行的基本单位。一个进程里可以有多个线程,线程也被称为轻量级进程。区别(1)进程之间的地址空间和资源是独立的,而同一线程共享本地进行的空间和资源(2)一个进程奔溃之后,不会对其他进程产生影响,但是一个线程奔溃之后,整个进程都会死掉。(3)线程执行开销比较小。2、什么是并行,什么是并发并发:同个时间段,多个任务都在执行,但不一定同时执行。并行:多个任务在单位时间内同时进行

2021-11-27 15:15:40 262

原创 多个关键字

static关键字(1)修饰变量:静态变量-类变量,静态变量存在于方法区中,只存在一个副本,所有对象共享一个变量,只在类的加载时被初始化,因此当某个对象修改了静态变量后,其他对象调用的是被修改过的。(2)修饰方法:静态方法,可以直接用类名.静态方法的方式访问,不依赖于对象。静态方法里面不可以调用非静态方法,因为他没有对象,而非静态方法可以调用静态方法。(3)修饰代码块:只会在类的初次加载中被执行一次,通常将只执行一次的初始化操作都放在static代码块的进行。(4)修饰静态内部类:定义在类内部类叫做

2021-11-26 21:04:23 85

原创 访问修饰符与缓存池

9、访问修饰符,private protected public以及不写的区别(1)private:同一类内可见。可以修饰对象:变量,方法(2)default:即默认,同一包内可见,可以修饰对象:变量、方法、接口、类(3)protected:对同一包内的类和子类可见,,修饰对象:变量、方法不能修饰类(4)public:所有类可见,修饰对象:类、接口、变量、方法**跨平台性:**因为Java程序编译之后的代码不是能被硬件系统直接运行的代码,而是一种“中间码”——字节码。然后不同的硬件平台上安装有不同

2021-11-26 20:49:32 445

原创 抽象类和接口

抽象类和接口抽象类:抽象类的设计就是为了代码复用,父类知道子类要完成某个功能,但是每个子类实现的情况不一样。拥有抽象方法的类必须定义成抽象类,必须用abstract修饰,抽象类是为了被继承1. 抽象类使用abstract修饰;2. 抽象类不能实例化,即不可以使用new关键字实例化对象,但是抽象类中可以有构造方法3. 含有抽象方法(使用abstract修饰的方法)的类是抽象类,必须使用abstract关键字修饰4. 抽象类可以不含有抽象方法,抽象类中可以含有具体的方法5. 如果一个子类继承了父类(

2021-11-26 20:30:47 89

原创 异常与反射

异常的分类Throwable 可以用来表示任何可以作为异常抛出的类,分为两种: Error 和 Exception。其中 Error用来表示 JVM 无法处理的错误,比如OutOfMemoryError堆溢出错误,栈溢出错误。Exception 分为两种:受检异常(非运行时异常) :这些异常必须经过 try…catch… 语句捕捉检查处理的,否则不能通过编译。如 IOException操作输入流或者输出流的可能出现的异常、SQLException SQL语句可能出现的异常等。运行时异常:都是 R

2021-11-26 17:27:56 108

原创 String和Object

String概述String 被声明为 final,因此它不可被继承。在 Java 8 中,String 内部使用 char 数组存储数据。在 Java 9 之后,String 类的实现改用 byte 数组存储字符串,同时使用 coder 来标识使用了哪种编码。常用API//比较字符串的,比较的是字符串内容 ,返回的是booleanboolean equals(Object anObject)//根据索引获取对应的字符char charAt(int index)//获取字符串长度

2021-11-26 16:47:30 301

原创 面向对象与面向过程

一、面向对象与面向过程的区别面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。可以拿生活中的实例来理解面向过程与面向对象,例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤

2021-11-26 15:44:17 101

原创 mysql慢查询优化

定位低效SQL 执行慢有两种情况:偶尔慢:DB 在刷新脏页redo log 写满了内存不够用,要从 LRU 链表中淘汰MySQL 认为系统空闲的时候MySQL 关闭时一直慢的原因:索引没有设计好、SQL 语句没写好、MySQL 选错了索引’mysql慢查询优化第一步:开启mysql慢查询日志,通过慢查询日志定位到执行较慢的SQL语句。第二步:利用explain关键字可以模拟优化器执行SQL查询语句,来分析SQL查询语句。第三步:通过查询的结果进行优化。优化方式(1)首先分

2021-11-26 15:05:45 7181

原创 IOC原理

IOC操作Bean管理1、spring有两种Bean,一种是普通类型Bean,另一种是工厂类型2、普通类型Bean:在配置文件中bean类型就是返回类型3、工厂bean:配置文件中bean类型可以和返回的不一样(1)创建类,让这个类作为工厂bean,实现接口factory(2)实现接口里面的方法,在实现的方法中定义返回bean类型...

2021-11-15 18:59:47 189

原创 Spring中事务的使用和配置

Spring–事务配置1、事务概念(1)事务是数据库操作的最基本单元,逻辑上一组操作,要么都成功,要么都失败。(2)典型场景,我给你转100,我少100,你多100四个特性(1)原子性:事务是最小的执行单位,不允许分割。事务的原子性保证动作要么全部完成,要么全部不起作用。(2)一致性:执行事务前后数据保持一直,多个事务对同一个数据读取的结果是相同的。(3)隔离性:并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间的数据库时独立的。(4)持久性:一个事务被提交之后,它在数据库中

2021-11-15 18:59:25 291

原创 性能优化精髓

1、为什么要优化数据库(1)因为系统的吞吐量瓶颈很大部分是数据库的访问速度(2)在数据库中数据量越来越多的情况,会影响访问速度,必须优化来提升访问的速度(3)数据库的数据是存储在磁盘上,访问速度远小于缓存。2、如何优化(1)设计数据库的时候,字段的设计,存储引擎的选择,(2)可以对数据库进行分库分表,读写分离,还可以进行负债均衡(3)还可以对SQL语句进行优化(4)还可以利用好mysql的索引进行优化3、字段的优化(1)能使用定长的就使用定长的数据类型,因为非定长的数据类型会随着数据增大

2021-11-09 17:44:38 80

原创 一条SQL查询语句/更新语句是怎么执行的

1、小知识点(1)数据库连接一旦建立之后,即使管理员修改了权限,依旧可以操作。(2)数据库使用的长连接。(3)在使用了长连接之后,mysql在执行过程中内存使管理在连接对象中的,因此可能出现内存占用非常大的情况。这些资源会在连接断开后释放掉,但是可能在过程中占用过多内存而导致OOM,mysql异常重启。–解决方法1)定期断开连接,在完成一个占用较多内存的查询后,可以断开这个连接,再次查询的时候再进行连接。2)在mysql5.7版本之后,在执行完一次比较大的查询操作后,可以通过mysql-res.

2021-10-24 09:50:50 127

原创 基本排序算法

1、选择排序选择排序就是每次都要遍历一遍,把最小值放到最开始的位置,因此它的时间复杂度为o(n^2),即便一开始是顺序的排序,它的时间复杂度也这么高,空间复杂度为o(1),是不稳定排序。2、插入排序(1)插入排序是先默认第一个元素是有序的,然后让第二个元素和有序序列从尾到头比较,如果该元素小于有序序列的元素,那么有序序列的元素就得挨个往后移,再把该元素插进去。(2)如果该序列是有序的,那么时间复杂度为o(n),最坏情况就是倒叙,那么时间复杂度为o(n2),平均也得o(n2)。3、希尔排序(1).

2021-10-21 14:58:51 50

原创 类加载机制

1、JVM的主要组成部分及其作用(1)Class loader(类装载):根据给定的全限定名类名(java.lang.Object)来装载class文件到运行时数据区的方法区(2)Execution engine(执行引擎):执行classes中的指令(3)Native Interface(本地接口):与native libraries交互,是其它编程语言交互的接口。(4)Runtime data area(运行时数据区):JVM内存**作用:**首先通过编译期把java源码转化成字节码,类加载

2021-09-08 17:52:10 82

原创 IO模型呀

IO流java中IO流分为几种(1)按照流的流向分,可以分为输入流和输出流(2)按照操作单元划分,可以分为字节流和字符流。(3)按照流的角色可以分为节点流和处理流。常见的3中IO模型BIO(blocking I/O):同步阻塞IO模型同步阻塞IO模型中,当应用程序发起read之后,会一直阻塞,直到在内核把数据拷贝到用户空间,它在连接数比较少的情况下,是比较适用的。缺点:一个线程维护一个IO,当并发量大的时候要创建大量的线程来维护网络连接,内存、线程开销非常大。NIO(Non-block

2021-09-02 21:56:55 35

原创 计算机网络面经

15、TCP如何保证可靠性TCP主要使用了校验和、序列号/确认应答、滑动窗口、拥塞控制、超时重传、流量控制等方法校验和:通过校验和的方法,接收端可以检测出来数据是否有差错和异常,如果有异常可以直接丢掉TCP段,重传。序列号/确认应答:TCP把传送的包编号,接收端收到包后并排序,然后把有序的数据传给应用层。接收端收到数据后,发送ack报文确认收到,ack报文中包含带有对应的确认序列号,告诉发送方,接收到哪些数据,下次数据从哪里发送。超时重传:是指发送数据到接收到数据的时间,如果超过这个时间就认为是丢

2021-08-03 14:51:46 543

原创 垃圾回收器

垃圾回收器垃圾回收器分类1、按线程数分:可以分为串行垃圾回收器和并行垃圾回收器(1)串行回收是指在同一时间内只允许一个CPU进行垃圾回收操作,此时工作线程停止,直到垃圾回收操作结束。(适合单核cpu或者应用内存硬件较差的场合)(2)并行收集可以多个CPU同时进行垃圾回收,因此提升了应用的吞吐量,不过并行回收和串行回收一样,使用stw机制2、按工作模式分:可以分为并发式垃圾回收器和独占式垃圾回收器(1)并发式垃圾回收器与应用线程交替工作,以尽可能减少应用程序的停顿时间。(2)独占式垃圾回收器一旦

2021-07-26 19:24:17 73

原创 垃圾回收算法

1、主要发生位置(1)GC主要发生于堆和方法区(2)次数上讲,频繁young区,较少old区,基本不元空间2、垃圾回收相关算法判断对象是否存活,有两种方式:引用计数算法和可达性分析算法(1)引用计数算法:对每一个对象保存一个整形的程序计数器属性,用来记录对象被引用的情况。对于一个对象A,如果有一个对象引用了A,则A的引用计数器加1,引用失效就减1,如果引用计数器为0,就表示对象没有被引用。优点:实现简单,垃圾判定效果高,回收没有延迟性。缺点:增加存储空间开销,更新引用计数器增加了时间开销,无

2021-07-25 20:26:56 123

原创 JVM对象实例化以及String

1、创建对象的方式(1)new(2)class的newinstance方法:反射的方式,只能调用空参构造器,权限必须是public(3)constructor的newinstance方法:反射的方式,可以调空参、带参的构造器,权限没有要求(4)使用clone():不调用任何构造器,要求当前的类实现cloneable接口,来实现clone()(5)使用反序列化:从文件、网络中获取一个对象的二进制流2、创建对象的过程(1)判断对象对应的类是否加载、连接、初始化(2)为对象分配内存,如果内存规整

2021-07-25 12:01:02 106

原创 JVM方法区

1、堆栈方法区的关系创建对象Person类(对象数据类型)放在方法区,对象实例数据放在堆中方法区可以看做是独立于java堆的内存空间2.2、 方法区的基本理解(1)方法区和堆一样,是各个线程共享的内存区域(2)方法区在JVM启动的时候就被创建,但实际物理地址和堆一样都是不连续的。(3)方法区的大小,和堆空间一样,可以固定大小和扩展。(4)方法区的大小决定了系统了可以保存多少个类,如果系统定义了太多的类,导致方法区溢出,虚拟机同样会抛出内存溢出错误。java.lang.OutOfMemoryE

2021-07-21 10:48:12 210

原创 mysql特性和锁

1、 数据库事务有哪些特性事务:事务是数据库最基本的执行单位,要么全都执行,要么都不执行。(1)原子性:事务是最小的执行单位,逻辑上不允许分割,事务的原子性保证操作要么全部完成,要么全部失败。(2)一致性:执行事务前后,数据保持不变,多个事务对同一数据的读取结果是相同的。(3)隔离性:并发访问数据库时,一个用户的事务不会被其他事务所干扰,各并发事务访问的数据库是独立的。(4)持久性:是指一个事务被提交之后,他在数据库中修改的数据是永久的,不会因为数据库发生故障而影响。2、什么是脏读,不可重复度,

2021-06-25 15:39:19 172

原创 java集合

1、List、set、map三者的区别(1)List(对付顺序的好帮手):存储的元素是有序的,可重复的(2)set(注重独一无二的性质):存储的元素是无序的,不可重复的(3)map(用key搜索的专家):使用键值对存储,key是无序的,不可重复的,value是无序的,可重复的,每个键最多映射一个值2、ArrayList和LinkedList的区别(1)是否保证线程安全:两个都是线程不同步的,也就都不保证线程安全。(2)底层数据结构:ArrayList底层使用的是Object数组,LinkedLi

2021-06-20 21:17:43 981

原创 SpringMVC学习~

1、回顾MVC1.1、什么是MVC(1)M(model):数据模型,提供要展示的数据,包括数据和行为,可以认为是Javabean。包括Value Object(数据dao层) 服务层(Service)(2)V(view):jsp(向控制器中提交数据,显示模型中的数 据)一把就是我们见到的用户界面,客户想看到的东西(3)C(controller):servlet(接受用户请求,委托给模型进行处理,处理完毕后把数据模型返回给视图,由视图进行展示)是一种软件设计规范!(4)MVC主要作用是降低了视图

2021-06-13 21:25:01 1116 2

原创 Mybatis框架学习笔记

Mybatis1.1MyBatis是一个优秀的持久型框架:它支持自定义SQL,存储过程以及高级映射。免去了几乎所有JDBC代码以及设置参数 获取结果的映射集,可以通过简单的XML或者注解来配置和映射原始类型、接口和java pojo为数据库的记录。简化了数据库链接,把精力放在SQL语句上。1.2、JDBC问题(1)数据库连接:连接数据库过于频繁,浪费资源,影响数据库性能。(2)SQL语句:要修改sql语句时,要重新编译java代码,不利于系统维护。Mybatis只要修改xml中的sql语句就行。

2021-06-10 23:14:15 96

原创 spring框架面经

1、谈谈对spring IOC的理解IOC控制反转是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由spring框架处理。IOC容器是spring框架用来实现IOC的载体,IOC容器实际是个map,里面存放的是各种对象。将对象之间的相互依赖关系交由IOC管理,并由IOC容器完成对象的注入。IOC容器就像一个工厂一样,当我们创建一个对象的时候,只需要配置好配置文件或注解就行,完全不用考虑对象是如何创建出来的,大大增加了项目的可维护性且降低了开发难度。 IOC就是控制反转,指创建对象的控制权转移,

2021-05-30 20:53:29 317

空空如也

空空如也

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

TA关注的人

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