自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 项目中为啥用log4j代替System.out.println

项目中为啥用log4j代替System.out.println

2022-06-08 09:32:07 597

原创 前后端分离式项目部署

一、环境准备准备三台Linux服务器节点,一台部署前端项目,Nginx以及一些基础设施(包括MySQL,redis);另外两台服务器节点用来部署后端项目(JDK,Maven和Tomcat),为了部署多实例,模拟集群。可以用SecureCRT来连接,SecureCrt是一款优秀的windows连接linux/unix机器的工具。在码云上打包下来的文件,在本地IDEA要修改相关配置依赖,如数据库(application-druid.yml),redis(application.yml)以及日志文件(log.

2022-05-02 22:32:11 5092

原创 软件测试整理

请你分别介绍一下单元测试、集成测试、系统测试、验收测试、回归测试参考回答:1、单元测试:完成最小的软件设计单元(模块)的验证工作,目标是确保模块被正确的编码,使用过程设计描述作为指南,对重要的控制路径进行测试以发现模块内的错误,通常情况下是白盒的,对代码风格和规则、程序设计和结构、业务逻辑等进行静态测试,及早的发现和解决不易显现的错误。2、集成测试:通过测试发现与模块接口有关的问题。目标是把通过了单元测试的模块拿来,构造一个在设计中所描述的程序结构,应当避免一次性的集成(除非软件规模很小),而.

2022-04-14 21:33:21 1617

原创 操作系统之进程和线程及JVM怎么实现Java线程安全

1.进程的定义和CPU执行我们写的代码存在硬盘里,编译后生成二进制可执行文件,当运行时会存到内存里,接着CPU执行指令,运行的程序就被称为进程。但是硬盘的读写速度很慢,如果CPU慢慢等硬盘返回数据的话,利用率就很低。所以当进程去硬盘读取数据时,CPU不需要阻塞等待数据的返回,而是执行其他进程。当数据返回时,CPU就会中断再继续运行这个进程。虽然单核CPU在某一瞬间只能运行一个进程。但在1秒期间可能会运行多个进程,这样就产生并行的错觉,实际上这是并发。并发和并行的区别?进程的状态:分为

2022-04-12 15:27:50 840

原创 Java容器

一、概览容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表。Collection1. Set TreeSet:基于红黑树实现,支持有序性操作,例如根据一个范围查找元素的操作。但是查找效率不如 HashSet,HashSet 查找的时间复杂度为 O(1),TreeSet 则为 O(logN)。 HashSet:基于哈希表实现,支持快速查找,但不支持有序性操作。并且失去了元素的插入顺序信息,也就是

2022-04-05 21:25:37 174 1

原创 MySQL

一、索引B+ Tree 原理1. 数据结构B Tree 指的是 Balance Tree,也就是平衡树。平衡树是一颗查找树,并且所有叶子节点位于同一层。B+ Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现,它具有 B Tree 的平衡性,并且通过顺序访问指针来提高区间查询的性能。在 B+ Tree 中,一个节点中的 key 从左到右非递减排列,如果某个指针的左右相邻 key 分别是 keyi和 keyi+1,且不为 null,则该指针指向节点的所有 key 大于等于 k.

2022-04-05 21:07:39 182

原创 SQL语句之分组,查询和连接

一、分组把具有相同的数据值的行放在同一组中。可以对同一分组数据使用汇总函数进行处理,例如求分组数据的平均值等。指定的分组字段除了能按该字段进行分组,也会自动按该字段进行排序。SELECT col, COUNT(*) AS numFROM mytableGROUP BY col;GROUP BY 自动按分组字段进行排序,ORDER BY 也可以按汇总字段来进行排序。SELECT col, COUNT(*) AS numFROM mytableGROUP BY colORD

2022-04-05 20:51:14 4332

原创 Redis的分片和使用Redis实现一个论坛功能

一、Redis 与 Memcached两者都是非关系型内存键值数据库,主要有以下不同:数据类型Memcached 仅支持字符串类型,而 Redis 支持五种不同的数据类型,可以更灵活地解决问题。数据持久化Redis 支持两种持久化策略:RDB 快照和 AOF 日志,而 Memcached 不支持持久化。分布式Memcached 不支持分布式,只能通过在客户端使用一致性哈希来实现分布式存储,这种方式在存储和查询时都需要先在客户端计算一次数据所在的节点。Redis Cluster

2022-04-05 16:55:36 464

原创 Redis的字典和跳表数据结构及使用场景

一、概述Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能,使用分片来扩展写性能。二、数据类型数据类型 可以存储的值 操作 STRING 字符串、整数或者浮点数 对整个字符串或者字符串的其中一部分执行操作</br> 对整数和浮点数执行自增

2022-04-05 16:39:40 1677

原创 Linux常用操作整理

比较重要的知识点能简单使用 cat,grep,cut 等命令进行一些操作; 文件系统相关的原理,inode 和 block 等概念,数据恢复; 硬链接与软链接; 进程管理相关,僵尸进程与孤儿进程,SIGCHLD 。一、常用操作以及概念快捷键Tab:命令和文件名补全; Ctrl+C:中断正在运行的程序; Ctrl+D:结束键盘输入(End Of File,EOF)求助1. --help指令的基本用法与选项介绍。2. manman 是 manual 的缩写,将指令..

2022-04-04 21:30:15 363

原创 操作系统整理

基本特征1. 并发并发指宏观上在一段时间内能同时运行多个程序,并行是同一时刻能运行多个指令。操作系统通过引入进程和线程,使得程序能够并发运行。2. 共享共享是指系统中的资源可以被多个并发进程共同使用。有两种共享方式:互斥共享和同时共享。互斥共享的资源称为临界资源,例如打印机等,在同一时刻只允许一个进程访问,需要用同步机制来实现互斥访问。3. 虚拟虚拟技术把一个物理实体转换为多个逻辑实体。主要有两种虚拟技术:时分复用技术和空分复用技术。多个进程能在同一个处理器..

2022-04-04 20:57:04 162

原创 一篇文章弄懂如何实现SSO单点登录

单点登录的介绍单点登录(Single Sign On, SSO)是指在同一帐号平台下的多个应用系统中,用户只需登录一次,即可访问所有相互信任的应用系统。举例来说,百度贴吧和百度地图是百度公司旗下的两个不同的应用系统,如果用户在百度贴吧登录过之后,当他访问百度地图时无需再次登录,那么就说明百度贴吧和百度地图之间实现了单点登录。单点登录的本质就是在多个应用系统中共享登录状态。如果用户的登录状态是记录在 Session 中的,要实现共享登录状态,就要先共享 Session,比如可以将 Session ..

2022-04-02 21:21:32 2384

原创 SPI定义

服务提供者接口,通过在classPath路径下文件夹查找文件并自动加载文件里所定义的类。Java中连接数据库加载驱动,通过driverManger获取connection连接对象,创建statement对象创建SQL语句,最后再处理结果集。驱动不同而且只是一个接口,不可以直接实例化,除非知道接口的全限定名,通过反射。SPI解决不同框架之间的扩展问题。springBoot自动装配其他框架的包名不同不能扫描注入,解耦,读取spring.factories文件,加载到IOC中。总.

2022-03-25 13:56:42 1169

原创 操作系统的内存分配

内存空间的分配包括连续分配存储管理和非连续分配存储管理。连续分配管理方式首先确定外部碎片和内部碎片的定义。在内存空间中,内部碎片是指分配给某进程的内存区域中没有被用到的部分,例如一个进程5MB,操作系统为其分配了6MB,则存在1MB用不到的内部碎片。外部碎片是指还没有被分配出去(不属于任何进程),但由于太小了无法分配给申请内存空间的新进程的内存空闲区域。单一连续分配在单一连续分配中,内存分为系统区和用户区,系统区存放操作系统相关数据,用区去存放用户进程相关数据。在内存中只有一道用户程序。

2022-03-20 20:32:21 1432

原创 手写一个生产者消费,单例DCL,及一个ReentrantLock

手写多线程消费生产者,单例模式,Reentrantlock

2022-03-20 16:18:33 141

原创 JVM常见面试题

以下是本期JVM面试题的目录: 讲一下JVM的内存结构? 说一下堆栈的区别? 什么情况下会发生栈溢出? 类文件结构 什么是类加载?类加载的过程? 什么是双亲委派模型? 为什么需要双亲委派模型? 什么是类加载器,类加载器有哪些? 如何判断一个对象是否存活? 可作为GC Roots的对象有哪些? 什么情况下类会被卸载? 强引用、软引用、弱引用、虚引用是什么? Minor GC 和 Ful

2022-03-15 20:25:11 91

原创 MySQL

事务的四大特性?事务特性ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。 一致性是指一个事务执行之前和执行之后都必须处于一致性状态。比如a与b账户共有1000块,两人之间转账之后无论成功还是失败,它们的账户总和还是1000。 隔离性。跟隔离级别相关,如read committed,一个事务只能读到已经提交的修改。 持久性

2022-03-15 19:40:30 79

原创 MyBatis

什么是 MyBatisMyBatis 是一种半自动化的 Java 持久层框架,其通过注解或 XML 的方式将对象和 SQL 关联起来。之所以说它是半自动的,是因为和 Hibernate 等一些可自动生成 SQL 的 ORM(Object Relational Mapping) 框架相比,使用 MyBatis 需要用户自行维护 SQL。维护 SQL 的工作比较繁琐,但也有好处。比如我们可控制 SQL 逻辑,可对其进行优化,以提高效率。为什么要使用 MyBatis我们在使用 Java 程序访问数据库

2022-03-15 14:32:39 1261

原创 关于HTTP cookie,sessionid,token问题

1.cookie不安全,而sessionid也是放在cookie里,是不是没有区别,不安全?答:首先cookie是放在HTTP头部字段的东西,里面存放的是身份标识数据。由于cookie是明文显示的,如果身份标识数据是用户密码,那肯定不安全。存放在客户端,容易被篡改。而sessionid也是身份标识数据,但是是放在服务端的,就是一个单纯的id,就算被知道了,也不知道用户密码。所有sessionid是存在在cookie里的。安不安全取决于身份标识数据存放的是什么。而争对cookie安全问题,JS脚本

2022-03-14 09:52:36 2534

原创 网络系统整理

一.基础篇同一台设备上的进程间通信,我们可以采用管道,消息队列,共享内存,信号等方式。而对于不同设备的通信,采用网络协议。应用层:只给用户提供应用功能,不要关心怎么传输的。应用层是工作在操作系统中的用户态,传输层及以下则工作在内核态。传输层:有两个传输协议,主要是TCP和UDP。只需要服务应用,作为应用间传输媒介,实现应用到应用的通信,TCP:大部分应用如HTTP都是使用的TCP传输层协议,TCP比UDP多了很多特性,比如流量控制,超时重传,拥塞控制。UDP:只负责发送数据包,不保证

2022-03-13 16:27:04 3028

原创 SpringMVC

1.工作原理(1)用户端发起请求,直接请求到DispatcherServlet;(2)DispatcherServlet根据请求信息调用HandlerMapping,解析请求对应的Handler.(3)解析到对应的handler即controller后,由handlerAdapter适配器处理。(4)handlerAdapter调用真正的处理器处理请求逻辑。(5)处理完返回一个ModelAndView对象,model是返回的数据对象,view是个逻辑view。(6)ViewRes

2022-02-28 16:26:42 133

原创 Spring

一.Spring4和Spring5 AOP执行流程差别1.Spring4正常执行:@Before======@After======@AfterReturning异常执行:@Before======@After======@AfterThrowing2.Spring5正常执行:@Before(前置通知)=======@AfterReturning(返回后通知)=======@After(后置通知)异常执行:@Before========@AfterThrowing====@Aft.

2022-02-28 15:53:22 241

原创 Redis主从,哨兵,集群,分布式锁

1.redis常用适用方式(1)单副本,数据量少(2)多副本(主从):master节点挂掉,需要手动指定新的master,可用性差,一般不用;(3)哨兵模式(sentinel):master挂了,哨兵会主动选举新的master,但是每个节点存储数据一样,浪费内存空间。数据量不多,集群规模不大,需要自动容错时使用。哨兵个数要满足2n+1,奇数个;并且不能读写分离,slave节点只备份不提供服务。哨兵只判断,不执行故障转移。(4)cluster:海量数据,所有master容量和就是数据量

2022-02-27 15:47:16 621

原创 Redis线程模型,事务

1.单线程如果一个DB,CPU不是瓶颈,大多数时IO密集的,不是CPU密集的。具体到redis,如果不考虑持久化,不会有瓶颈,真正来源时网络IO,也就是客户端和服务端之间的网络传输延迟,因此redis选择了单线程的IO多路复用实现核心网络模型。(1)避免过多的线程上下文切换开销;(2)避免同步机制的开销,会涉及到底层数据同步的问题,要加同步比如锁。带来加锁和解锁。(3)简单可维护,如果多线程,都必须实现线程安全,会更加复杂。2.redis6.0引入多线程I/O只是用来处理网络数据的读

2022-02-27 14:33:51 139

原创 Redis缓存异常

1.如何保证双一致性

2022-02-27 11:04:43 666

原创 Redis概述,持久化,过期键的删除淘汰策略

概述1.K-V非关系数据库,加载在内存中,异步保存(1)读写最快,能处理10万次的读写操作;(2)支持数据持久化:有AOF和RDB;(3)支持事务,所有操作都是原子性的。通过MULTI和EXEC指令包起来;(4)数据结构丰富,支持string,list,set,hash,Zset结构;(5)支持主从复制,读写分离。(6)支持通知订阅,过期缺点:(1)不能做海量数据的读写(2)主机宕机,不能及时同步。2.为啥快(1)在内存中;没有磁盘IO,类似HashMap。(.

2022-02-26 20:45:30 402

原创 MySQL优化

1.执行explain语句,引擎都会对SQL语句进行优化,对于查询语句,最重要的就是使用索引。2.大表数据查询,怎么优化(1)优化shema(设计优化),SQL语句+索引;(2)加缓存,如memcached,redis;(3)主从复制,读写分离;(4)分库分表,水平拆分,最麻烦,要选择一个合理的sharding key,并且表结构要改,SQL要带sharding key。定位到限定的表,而不是扫描全部的表。(5)垂直拆分,将大系统分为多个小系统,就是分布式系统。3.超大分页怎么处

2022-02-26 19:38:01 416

原创 锁,分库分表,读写分离,主从同步

锁1.在关系型数据中,数据库锁分为行级锁(innodb引擎,分为共享锁和排他锁),表级锁(MYISAM引擎和innodb)和页级锁(BDB引擎)。共享锁又称为读锁,共享锁可以同时加上多个;排他锁又称作写锁,只可以加一个,和排他锁,共享锁都互斥。悲观锁:在查询完数据就把事务锁起来,直到提交事务。设用于写多的情况。乐观锁:在修改数据时把事务锁起来,通过version的方式来锁定。一般用版本号或者CAS实现。适合于写少读多。2.innobd是基于索引完成行锁for update.

2022-02-26 17:10:45 318

原创 MySQL

聚簇索引:将数据存储和索引放在一起、并且是按照一定的顺序组织的,找到索引也就找到了数据,数据的物理存放顺序与索引顺序是一致的,即:只要索引是相邻的,那么对应的数据一定也是相邻的存放在磁盘上的。 非聚簇索引:叶子节点不存储数据,存储的是数据行地址,也就是说根据索引查找到数据行的位置再去磁盘查找数据,这就有点类似一本书的目录,比如要找到第三章第一节,那就现在目录里面查找,找到对应的页码后再去对应的页码看文章。 InnoDB中一定有主键,主键一定是聚簇索引,不手动设置,则会使用一个unique...

2022-02-25 20:05:27 173

原创 线程池专题,AQS和原子类

1.线程池的好处:(1)降低资源消耗:利用已创建的线程降低创建和消耗的浪费;(2)方便管理:同一分配,调优和监控。防止无限创建;(3)提高响应速度:任务到达时,不需要等线程创建就立即执行。2.execute()和submit()方法execute提交不需要返回值的任务,无法判断任务是否被线程池执行成功;而submit提交有返回值的,一个future对象,判断任务是否执行。3.线程池核心参数核心线程;最大线程;线程工厂;非核心线程等待时间;时间单位;拒绝策略;阻塞队列。拒绝策略

2022-02-25 16:04:23 165

原创 JAVA并发

1.进程和线程(1)进程是操作系统资源分配的基本单位,线程是处理器任务调度和执行的基本单位。(2)每个进程都有独立的代码和数据空间(程序上下文),程序间切换有较大的开销;线程是轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立运行栈和程序计数器,线程之间开销小。(3)进程崩溃对其他进程没有影响,但是线程崩溃会导致整个进程死掉。2.创建线程的方式thread类,runnable接口;线程池thread其实是实现runnable接口的一个实例(1)实现runable接.

2022-02-25 15:33:35 67

原创 JVM整理

1.JVM内存结构方法区:存放已经加载的类信息,常量,静态变量。即永久代。在1.8中不存在方法区了,被元数据区替代了,原方法区被分为:1.加载的类信息;2.运行时常量池。加载的类信息被保存到元数据区中,运行时常量池保存在堆中。2.Java内存模型(JMM)它明确指定了一组排序规则,来保证线程间的可见性。(1)volatile:保证可见性和有序性;(2)synchronized:保证可见性(在unlock前写入内存)和有序性(只能一个线程占有锁)。通过管程(Monitor)保证原子

2022-02-25 10:43:46 160

原创 Java集合

1.集合类主要由collection和Map派生而来的。collection派生出三个子接口:List,Set,Queue。

2022-02-24 16:15:14 78

原创 Java基础

1.Java语言特点:面向对象(继承,封装,多态);平台无关;支持多线程;支持网络编程;编译与解释并存;Java没有指针的概念;Java不支持多继承,但允许一个类实现多个接口;Java自动垃圾回收。2.Java是编译型还是解释型语言?Java无论在什么平台,都可以编译生成固定格式的字节码(.class文件)供JVM使用。Java通过字节码的方式在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。3.Java数据类型分为两种:基本数据类型和引用数据类型基本数据

2022-02-23 19:57:55 121

原创 AQS的原理和区别

syn和ReentrantLock都是可重入同步锁,可一定程度避免死锁。可重入锁:一个线程中的多个流程可以获取同一把锁,持有这把同步锁可以再次进入。自己可以获取自己的内部锁。syn的重入的实现机理LockSupport 的方法和作用相当于wait和notify的提升,LockSupport 中的park()和unpark()的作用分别是阻塞线程和解除阻塞线程。底层还是unsafe,native。 park的底层许可证permit默认是0,所以一开始调用...

2022-01-11 14:39:58 286

原创 关于常量池在永久代还是堆中和String

字符串的内存分配 在Java语言中有8种基本数据类型和一种比较特殊的类型String。这些 类型为了使它们在运行过程 中速度更快、更节省内存,都提供了一种常量池的概念。 常量池就类似一个Java系统级别提供的缓存。8种基本数据类型的常量池都是系统协调的, String 类型的常量池比较特殊。它的主要使用方法有两种: 直接使用双引号声明出来的String对象会直接存储在常量池中。 如果不是用双引号声明的String对象,可以使用String提供的 intern() 方法。这个后面...

2022-01-06 16:04:28 280

原创 面试常见的Linux命令

1.top命令查看主机其中load average 三个值表示系统1分钟,5分钟,15分钟的负载值,如果三个值的平均超过60%就认为负载过重,按键1显示CPU。uptime简化版命令2.vmstat 查看CPUvmstat -n 2 3表示每隔2秒采集一次信息,共采集3次mpstat -P ALL 2 每隔2秒采样一次查看所有cpu核信息pidstat -u 1-p 进程编号 每个进程使用CPU的用量分解信息3.内存 free应用程序可用内存数 free -m查看额外内存 p

2022-01-06 15:22:47 298

原创 垃圾回收收集器

GC四种算法的实现 Java10以前新生代和老年代适用的垃圾回收器:其中,新生代收集器激活,老年代也会被默认激活相应的。如下图:不再推荐的:Parallel Scavenge的特点: 主要是吞吐量Parallel Scavenge收集器的特点是它的关注点与其他收集器不同,CMS等收集器的关注点是尽可能地缩短垃圾收集时用户线程的停顿时间,而Parallel Scavenge收集器的目标则是达到一个可控制的吞吐量(Throughput)。所谓吞吐量就是CPU用...

2022-01-06 13:40:20 278

原创 JAVA OOM的几种常见异常

OOM的几种常见异常前两种叫OOM异常,但实际上是错误。第三种:Sun 官方对此的定义:超过98%的时间用来做GC并且回收了不到2%的堆内存时会抛出此异常。第四种:Direct buffer memory本地内存在堆外,但是在内存里面。注意跟NIO程序有关。第五种:unable to create new native thread,高并发常见 实际情况中可能没有1024个。root用户是没有上限的,其他账户有1024个限制。第六种:元空间并不在虚...

2022-01-05 20:30:35 989

原创 JVM调优的基本配置参数

目录Java中可以作为GC Roots的对象有哪些JVM调优JVM常用的基本配置参数有哪些什么是GC Roots因为确立垃圾的方法有引用记数法,但是会产生循环引用,所以引出了另一种方法叫可达性分析,基本思想是通过一系列名为“GC Roots”的对象作为起始点,向下搜索,能被遍历到的就判定为存活,否则为死亡。要经过两次标记。Java中可以作为GC Roots的对象有哪些1.虚拟机栈(栈帧中的局部变量区,也叫局部变量表)中引用的对象。2.方法区中的类静态属

2022-01-05 15:53:07 335

空空如也

空空如也

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

TA关注的人

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