- 博客(70)
- 收藏
- 关注
原创 计算机网络
文章目录OSI七层协议HTTP 和 HTTPS 什么区别?对称加密算法和非对称加密算法HTTP1.0、HTTP1.1、HTTP2.0HTTP长连接和短连接区别及应用场景TCP三次握手TCP四次挥手TCP和UDP有什么区别?及其适用的场景。TCP 协议如何保证可靠传输TCP重传滑动窗口和流量控制拥塞控制TCP 粘包ARQ协议在浏览器中输入url地址 OSI七层协议 1、应用层 网络的具体应用 应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进
2021-08-26 23:53:13
515
原创 mysql、jvm、基础
文章目录基础线程和进程 基础 线程和进程 进程: 系统中运行的一个程序,每个进程都拥有独立的地址空间,一个进程无法访问另一个进程资源,如果想让一个进程访问另一个进程的资源,需要使用进程间通信。 匿名管道:半双工,只能在父子进程间通信 有名管道: 匿名管道由于没有名字,只能用于亲缘关系的进程间通信。为了克服这个缺点,提出了有名管道。有名管道可以在不同进程间通信 共享内存 :使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新。这种方式需要依靠某种同步操作,如互斥锁和信号量
2021-08-21 18:31:29
432
原创 HashMap、synchronized
文章目录synchronized锁升级 synchronized 锁升级 锁主要存在四种状态,依次是:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态。但是不能锁降级 首先处于无锁状态的时候,来了一个线程,这个线程就持有锁了,将线程id插入到Markword中,同时修改偏向锁的标志位,就会把对象的对象头中偏向锁的状态设置成1,表示加上偏向锁,同时也可以看到哪个线程获得了该对象的锁。 如果有其它线程进来的时候,首先会自旋 ...
2021-08-07 23:52:51
1557
原创 设计模式总结
文章目录单例模式 单例模式 单例模式 1、什么是单例模式 单例模式是指在内存中只会创建且仅创建一次对象的设计模式。 在程序中多次使用同一个对象且作用相同时,为了防止频繁地创建对象使得内存飙升,单例模式可以让程序仅在内存中创建一个对象,让所有需要调用的地方都共享这一单例对象。 2、单例模式类型 单例模式有两种类型: 懒汉式:在真正需要使用对象时才去创建该单例类对象 饿汉式:在类加载时已经创建好该单例对象,等待被程序使用 饿汉式创建单例对象 饿汉式在类加载时已经创建好该对象,在程序调用时直接返回该单例对
2021-06-03 15:05:51
360
原创 数据结构与算法
目录155.最小栈 155.最小栈 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。 pop() —— 删除栈顶的元素。 top() —— 获取栈顶元素。 getMin() ——检索栈中的最小元素。 每个元素 a 与其相应的最小值 m 时刻保持一一对应。因此我们可以使用一个辅助栈,与元素栈同步插入与删除,用于存储与每个元素对应的最小值。 当一个元素要入栈时,我们取当前辅助栈的栈顶存储的最小值,与当前元素比较得出最小值
2021-05-30 22:10:32
492
原创 动态规划解法
目录爬楼梯 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 本问题其实常规解法可以分成多个子问题,爬第n阶楼梯的方法数量,等于 2 部分之和 爬上 n-1阶楼梯的方法数量。因为再爬1阶就能到第n阶 爬上 n-2 阶楼梯的方法数量,因为再爬2阶就能到第n阶 所以我们得到公式 dp[n] = dp[n-1] + dp[n-2] 同时需要初始化 dp[1]=1 和 dp[2]=2 当n小于等于2时
2021-05-29 15:38:04
548
原创 链表算法例题
删除链表的倒数第N个节点 //我们弹出栈的第 n 个节点就是需要删除的节点,并且目前栈顶的节点就是待删除节点的前驱节点。 class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { ListNode dummy = new ListNode(0, head); Deque<ListNode> stack = new LinkedList<ListNode>(
2021-05-26 16:09:54
294
原创 排序算法总结
目录冒泡排序快速排序 冒泡排序 /** * 冒泡排序: * 1、一共进行数组的大小减一次大的循环, * 2、每一趟排序的次数在逐渐的减少, * 3、如果我们发现在某趟排序中,没有发生一次交换,可以提前结束冒泡排序。 * <p> * 时间复杂度:O(n^2) */ public static void bubbleSort(int[] arr) { int temp = 0; boolea
2021-05-24 14:26:22
188
原创 question
文章目录java并发一、JAVA如何开启线程,怎么保证线程安全 java并发 一、JAVA如何开启线程,怎么保证线程安全 线程和进程的区别: 进程是操作系统进行资源分配的最小单元,线程是操作系统有进行任务分配的最小单元,线程隶属于进程。 如何开启线程: 继承Thread类,重写run方法(由于Java只支持单继承,所以用继承的方式创建线程,不够灵活,所以不推荐使用继承Thread) 实现Runnable接口,实现run方法,run()不可以抛出异常 实现Callable接口,实现call方法,通过Futu
2021-04-22 20:47:36
328
原创 Java util cocurrent
文章目录AtomicInteger AtomicInteger AtomicInteger atomicInteger = new AtomicInteger; public final int getAndIncrement() { return unsafe.getAndAddInt(this, valueOffset, 1); } public final int getAndAddInt(Object var1, long var2, int var4) {
2021-04-20 11:24:58
168
1
原创 高并发
文章目录高并发 高并发 TPS (transaction per second) 每秒执行的事务数量 用户每分钟执行6个事务,TPS为6 / 60s = 0.10 TPS。 QPS(Queries-per-second) 每秒查询率 =请求数/秒=总请求数 / ( 进程总数 * 请求时间 ) 单个进程每秒请求服务器的成功次数 TPS与QPS有何区别 事务:客户端发起请求到收到服务端最终响应的整个过程,这是一个TPS 而在这个TPS中,为了处理第一次请求可能会引发后续多次对服务端的访问才能完成这
2021-04-18 22:53:28
109
原创 HashMap
目录HashMap数据结构HashMap实现原理HashMap原理解析 HashMap数据结构 数组 申
2021-04-08 22:20:09
341
原创 spring、springBoot、mybatis
目录springspringBoot spring IOC AOP springBoot @Configuration @Bean BeanFactory FactoryBean
2021-04-03 17:08:19
1794
原创 汉明距离
汉明距离 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y,计算它们之间的汉明距离。 示例: 输入: x = 1, y = 4 输出: 2 解释: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ 上面的箭头指出了对应二进制位不同的位置。 class Solution { public int hammingDistance(int x, int y) { int xor=x^y;
2021-04-01 22:19:21
85
原创 多线程总结
多线程Object o=new Obiect 在内存中占多少个字节?锁CASsynchronized实现过程AQS锁消除 eliminate锁粗化 lock coarsening锁优化锁升级过程volatilesynchronized同步方法与非同步方法synchronized锁重入Atomicwait notify系统底层如何实现数据一致性系统底层如何保证有序性CPU,内存,缓存,缓存行缓存一致性协议cpu乱序执行的概念DCL为什么不能乱序volatile如何阻止乱序内存屏障 Object o=new
2021-03-29 22:49:05
193
原创 JVM面试
JVM1、什么是垃圾2、jvm怎样定位垃圾2、GC回收算法 Java虚拟机(JVM)你只要看这一篇就够了! 1、什么是垃圾 没有引用指向它 2、jvm怎样定位垃圾 一、引用计数法 在 Java 中,引用和对象是有关联的。如果要操作对象则必须用引用进行。因此,很显然一个简单的办法是通过引用计数来判断一个对象是否可以回收。简单说,即一个 对象如果没有任何与之关联的引用,即他们的引用计数都不为 0,则说明对象不太可能再被用到,那么这个对象就是可回收 对象 。 二、可达性分析 为了解决引用计数法的循环引用问题,
2021-01-07 22:28:55
715
原创 MySQL面试
MySQLMySQL索引1.什么是索引?2.为什么要有索引呢?3.如何设计索引,用什么数据结构4、回表,索引覆盖,最左匹配,组合索引,索引下推 MySQL索引 1.什么是索引? MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。 我们可以简单理解为:快速查找排好序的一种数据结构。 索引存储在文件系统中,索引的文件存储形式与存储引擎有关 Mysql索引主要有两种结构:B+Tree索引和Hash索引。 我们平常所说的索引,如果没有特别指明,一般都是指B树结构组织的索引(
2020-12-26 22:23:08
595
原创 Java总结
Java基础类加载器 类加载器 类加载的结构如下: BootstrapClassLoader:启动类类加载器,是由c++实现的 ExtClassLoader:拓展类类加载器 AppClassLoader:应用程序类类加载器,它主要加载应用程序ClassPath下的类(包含jar包中的类)。它是java应用程序默认的类加载器。 用户自定义类加载器:用户根据自定义需求,自由的定制加载的逻辑,继承AppClassLoader,仅仅覆盖findClass()即将继续遵守双亲委派模型。 *ThreadContex
2020-11-25 18:48:27
885
原创 swagger
1.导入依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <!-- https://mvnr
2020-11-21 18:56:49
237
1
原创 Shiro
1.引包 <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-web-starter</artifactId> <version>1.4.1</version> </dependency> 2.配置 @.
2020-11-20 09:51:34
62
原创 git
$ git clone https://gitee.com/用户个性地址/HelloGitee.git #将远程仓库克隆到本地 修改代码后,在仓库目录下执行下面命令 $ git add . #将当前目录所有文件添加到git暂存区 $ git commit -m "my first commit" #提交并备注提交信息 $ git push origin master #将本地提交推送到远程仓库 ...
2020-11-11 15:27:12
85
原创 thymeleaf
添加Thymeleaf依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> 自动给我们默认分配了模版的前缀和后缀,我们只需要按部就班的将模版丢进去即可 public class ThymeleafProperties
2020-11-08 16:37:26
119
原创 WebMvcAutoConfiguration
WebMvcAutoConfiguration 静态资源配置类 public void addResourceHandlers(ResourceHandlerRegistry registry) { if (!this.resourceProperties.isAddMappings()) { logger.debug("Default resource handling disabled"); } else { Duration cachePerio
2020-11-07 22:29:12
413
原创 JSR303数据效验
JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation。 基本应用 一、引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> 二、给参数对象添加校验注解 @Data public
2020-11-07 20:40:45
108
原创 Mybatis总结
MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制。 默认情况下,只启用了本地的会话缓存,它仅仅对一个会话中的数据进行缓存。 要启用全局的二级缓存,只需要在你的 SQL 映射文件中添加一行: <cache/> 基本上就是这样。这个简单语句的效果如下: 映射语句文件中的所有 select 语句的结果将会被缓存。 映射语句文件中的所有 insert、update 和 delete语句会刷新缓存。 缓存会使用最近最少使用算法(LRU, Least Recently Us
2020-11-06 11:08:40
132
原创 String
** String ** String newStr = new String(s, 0, size); public String(char value[], int offset, int count) { if (offset < 0) { throw new StringIndexOutOfBoundsException(offset); } if (count < 0) { thro
2020-10-28 21:04:40
260
原创 charAt方法
charAt方法: java.lang.String.charAt()方法 返回 指定索引 处的 char值。索引范围 是从0 到length() - 1。 public char charAt(int index) { if ((index < 0) || (index >= value.length)) { throw new StringIndexOutOfBoundsException(index); } retu
2020-10-28 21:03:50
4338
原创 StringBuilder和StringBuffer
一、简介 StringBuffer,由名字可以看出,是一个String的缓冲区,也就是说一个类似于String的字符串缓冲区,和String不同的是,它可以被修改,而且是线程安全的。StringBuffer在任意时刻都有一个特定的字符串序列,不过这个序列和它的长度可以通过一些函数调用进行修改。 StringBuilder和StringBuffer一样,都是继承自抽象类AbstractStringBuilder类,也是一个可变的字符序列。StringBuilder和StringBuffer非常相似,甚至有互相
2020-10-28 21:03:36
131
原创 数据结构
常见的数据结构可分为「线性数据结构」与「非线性数据结构」 具体为:「数组」、「链表」、「栈」、「队列」、「树」、「图」、「散列表」、「堆」。 一、数组 数组是将相同类型的元素存储于连续内存空间的数据结构,其长度不可变。 // 初始化一个长度为 5 的数组 array int[] array = new int[5]; // 元素赋值 array[0] = 2; array[1] = 3; array[2] = 1; array[3] = 0; array[4] = 2; //或者可以使用直接赋值的初始化方
2020-10-28 21:03:22
578
转载 抽象方法、抽象类及接口
抽象方法以及抽象类 在Java中用abstract修饰的类是抽象类,用abstract修饰的类的方法是抽象方法,抽象类和抽象方法用法总结如下。 abstract可以修饰class表示抽象类,可以修饰方法表示抽象方法,但是不能修饰成员变量,也就是没有抽象的成员变量。 用abstract修饰的类中可以有abstract方法,也可以没有abstract方法;可以有非abstract方法,也可以没有非abstract方法。 只有abstract类中才能声明abstract方法,abstract方法不能声明在非ab
2020-10-28 21:03:04
130
原创 Jprofile工具分析OOM原因
/** * OutOfMemoryError * -Xms 设置初始化内存分配大小 默认1/64 * -Xmx 设置最大分配内存,默认1/4 * -XX:+PrintGCDetail // 打印GC垃圾回收信息 * -XX:+HeapDumpOnOutOfMemoryError //oom DUMP * -Xms1m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError */ public class Heap2 { byte[] array = new byt
2020-09-17 21:34:35
227
原创 堆Heap
/** * 堆 * 一个JVM只有一个堆内存,堆内存的大小是可以调节的。 * 类加载器读取了类文件后,一般会把类,方法,常量,变量,保存我们所有引用类型的真实对象; * <p> * 堆内存中还要分为三个区域: * 1、新生区(伊甸园区) * 2、养老区 * 3、永久区(元空间):这个区域常驻内存的。用来存放JDK自身携带的Class对象。 * Interface元数据,存储的是java运行时的一些环境或类信息,这个区域不存在垃圾回收! * 关闭VM虚拟就会释放这个区域的内存。
2020-09-17 20:48:33
96
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人