随笔- 122
文章- 0
评论- 0
阅读-
2599
08 2021 档案
面试被暴虐,含泪整理了 MySQL增删查改2.0
摘要:写在前面 这篇博客是基于基本的 MySQL增删查改1.0 的进阶版本,这几天面试被暴虐,毕竟好久没用了,于是决定从新复习一遍!!! 目录 写在前面一、查询likenulllimitoffset(偏移量) 二、约束not nulluniquedefaultprimary key(主键)自增主键 for
阅读全文
剑指 Offer II 33. 变位词组
摘要:题目 链接 剑指 Offer II 33. 变位词组描述 给定一个字符串数组 strs ,将 变位词 组合在一起。 可以按任意顺序返回结果列表。 注意:若两个字符串中每个字符出现的次数都相同,则称它们互为变位词。 输入与输出 输入: strs = [“eat”, “tea”, “tan”, “ate
阅读全文
剑指 Offer II 31. (LRU)最近最少使用缓存(双向链表 + 哈希表 / LinkedHashMap)
摘要:题目 链接 剑指 Offer II 031. 最近最少使用缓存描述 运用所掌握的数据结构,设计和实现一个 LRU (Least Recently Used,最近最少使用) 缓存机制 。 实现 LRUCache 类: LRUCache(int capacity) 以正整数作为容量 capacity 初
阅读全文
浅析JVM
摘要:这里写目录标题 JVM 概念JVM 内存区域划分JVM 要做什么?类加载双亲委派模型(找到 .class 文件)初始化流程 内存管理 JVM 概念 JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机
阅读全文
剑指 Offer II 28. 展平多级双向链表
摘要:题目 链接 剑指 Offer II 28. 展平多级双向链表描述 多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示.给定位于列表第一级的头节点,请扁平化列表,即
阅读全文
JUC(Java.util.concurrent)常见组件
摘要:这里写目录标题 ReentrantLocksemaphoreCountDownLatch原子类线程安全的集合 ReentrantLock ReentrantLock 和 synchronized 一样,也是一个可重入锁。 ReentrantLock 使用方法 import java.util.con
阅读全文
【剑指 Offer II】 16. 不含重复字符的最长子字符串
摘要:题目 链接【剑指 Offer II】 16. 不含重复字符的最长子字符串描述 给定一个字符串 s ,请你找出其中不含有重复字符的 最长连续子字符串 的长度。 输入与输出 输入: s = “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案
阅读全文
【剑指 Offer II】 15. 字符串中的所有变位词
摘要:题目 链接【剑指 Offer II】 15. 字符串中的所有变位词描述 给定两个字符串 s 和 p,找到 s 中所有 p 的 变位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。变位词 指字母相同,但排列不同的字符串。 输入与输出 输入: s = “cbaebabacd”, p = “ab
阅读全文
Runnable 和 Callable 的区别
摘要:区别 两个都是接口,但是 Runnable 方法中 run() 没有声明异常且没有返回值,而 Callable 中 call() 声明了异常且有返回值;(意味着使用 Runnable 需要自己处理异常)通过 Callable 创建线程需要一个辅助类 FutureTask 实例化对象来接收线程执行完毕
阅读全文
synchronized 底层原理
摘要:synchronized 膨胀/降级 基本流程 synchronized 不仅能够自动升级,还能自动降级!!! synchronized 不仅能够自动升级,还能自动降级!!! synchronized 不仅能够自动升级,还能自动降级!!! 其他优化 锁消除 编译器/JVM 某个代码不涉及线程安全问题
阅读全文
CAS 浅析(原理、实现自旋锁、ABA的产生与解决)
摘要:目录 什么是 CASCAS 原理CAS 实现自旋锁CAS 实现原子类ABA 问题如何解决 ABA 什么是 CAS CAS(compare and swap),比较与交换。 如果普通的比较与交换 public void compareAndSwap(int num1, int num2) { if (
阅读全文
【剑指 Offer II 】 14. 字符串中的变位词
摘要:题目 链接【剑指 Offer II 】 14. 字符串中的变位词 描述 给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的某个变位词。 换句话说,第一个字符串的排列之一是第二个字符串的 子串 输入与输出 输入: s1 = “ab” s2 = “eidbaooo” 输出: Tr
阅读全文
一个例子带你了解【死锁的原因】以及【解决的方法】
摘要:原因 常见的场景 一个线程一把锁 正常情况下,一个线程只能有一把锁,当这个线程想上第二把锁的时候,要释放第一把锁,才能上第二把锁; 而如果想要同时拥有两把锁,那么就是互相矛盾的。 而 Java 中 synchronized 已经对这个问题进行了优化。 在 synchronized 中,有一个变量专门
阅读全文
可重入锁和不可重入锁
摘要:可重入锁与不可重入锁 简单点理解 可重入锁:如果同一个线程加两把锁,不会出现问题的叫 可重入锁;不可重入锁:而会出现问题的叫 不可重入锁。 正常情况下,线程 A 加了锁 1,然后又要加锁 2,但是线程 A 要加锁 2 就必须释放锁 1,但是释放锁 1 就达不到沃目的(目的是加锁 1 和 锁 2),因
阅读全文
公平锁与非公平锁
摘要:公平锁与非公平锁 首先理解 公平 与 非公平 ,公平就是 不插队,非公平就是 插队。 操作系统调度线程的方式就是 随机的,也就是说是 非公平锁。 Java 中 synchronized 是 非公平锁。(自旋锁 也是 非公平锁) 如果想实现非公平锁,那么就需要做出额外的处理: 记录每个线程竞争锁的时间
阅读全文
重量级锁和轻量级锁(自旋锁)
摘要:重量级锁和轻量级锁 重量级锁和轻量级锁 一般(一般一般一般) 类似于悲观锁和乐观锁,站在了不同的角度划分的。 轻量级锁又叫自旋锁。 重量级锁与轻量级锁是站在 工作量 的角度来划分的; 而乐观锁和悲观锁则是站在 锁冲突概率 来划分的。 重量级锁:我们知道,我们要进入一个同步、线程安全的方法时,是需要先
阅读全文
浅析读写锁
摘要:读写锁 读写锁是一种特殊的锁,该锁把读操作和写操作分开了。 普通的锁提供了两个操作:加锁和解锁; 读写锁提供了三个操作:读加锁、写加锁和 解锁; 在有的场景中,只有少部分线程进行写操作,而大多数线程进行读操作。 读操作和写操作之间不需要保证原子性;读操作和读操作之间不需要保证原子性、内存可见性和禁止
阅读全文
乐观锁和悲观锁
摘要:乐观锁和悲观锁 乐观锁和悲观锁都是一种锁策略,也就是如何设计锁。 乐观锁:认为这个锁出现竞争的概率比较小(当前场景中,线程数目比较少,只是偶尔竞争一下锁) 悲观锁:和乐观锁相反,悲观锁出现竞争的概率比较大(当前场景中,线程数目比较多,很可能涉及竞争锁) 根据乐观锁和悲观锁的比较,可以得知乐观锁需要做
阅读全文
线程不安全的原因以及解决方法
摘要:线程不安全的原因 首先要了解使用多线程的原因,以 杀毒软件 为例。 使用单线程 想要执行 病毒查杀 和 清理垃圾,那么只能先执行 病毒查杀 和 清理垃圾 的其中一个,再执行另外一个。使用多线程 可以 同时执行 清理垃圾 和 病毒查杀。 但是问题随之而来,下边将解析多线程的安全问题。 抢占式执行(线程
阅读全文
Thread 和 Runnable 的区别
摘要:今天在学习多线程的时候,了解了 创建线程的几种方式,然后就脑子发热,突然想到 Thread 和 Runnable 创建线程有什么区别吗?毕竟是长得都不一样。所以我就找了一些资料(CSDN 大佬们的文章)来看看,有了一些理解。 明确一点:Runnable 和 Thread 本质上是没有区别的。 区别
阅读全文
单例模式(饿汉模式和懒汉模式)
摘要:饿汉模式 饿汉模式是线程安全的,不需要关键字来保证线程安全。 class Singleton { // 期望 singleton 是一个单例, 也就是只有一个实例 private static final Singleton instance = new Singleton(); public st
阅读全文
懒汉设计模式使用 volatile 关键字和两个 if 判断的原因
摘要:懒汉设计模式 代码 class Singleton { // 3. 加 volatile 关键字 volatile private static Singleton instance = null; public static Singleton getInstance() { // 2. 外层判断
阅读全文
wait() 和 sleep() 的区别
摘要:区别 举个例子 逍遥和老板去带客户去吃饭,逍遥中途被老板叫出去(wait 和 sleep 执行),逍遥出去后有两种再进入房间的方法 当老板叫逍遥进去的时候逍遥进去(notify 执行);逍遥自己进去(sleep 结束)。 虽然都进去房间了,但是效果是不一样的。 逍遥自己进去万一老板和客户正在谈一些机
阅读全文
【剑指 Offer II】 11 0 和 1 个数相同的子数组
摘要:题目 链接描述 给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。 也就是说给定的数组全是 0 和 1 组成的。 输入与输出 输入: nums = [0,1]输出: 2说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组 思路 首
阅读全文
【剑指 Offer II】13 二维子矩阵的和
摘要:题目 链接【剑指 Offer II】13 二维子矩阵的和描述 给定一个二维矩阵 matrix,以下类型的多个请求: 计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2) 。 实现 NumMatrix 类: NumMatrix(int[][]
阅读全文
【剑指 Offer II】 12 左右两边子数组的和相等
摘要:题目 链接【剑指 Offer II】 12 左右两边子数组的和相等描述 给你一个整数数组 nums ,请计算数组的 中心下标 。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对
阅读全文
【剑指 Offer II】 10 和为 k 的子数组
摘要:题目 链接 【剑指 Offer II】 010 和为 k 的子数组描述 给定一个整数数组和一个整数 k ,请找到该数组中和为 k 的连续子数组的个数 输入与输出 输入:nums = [1,1,1], k = 2 输出: 2 解释: 此题 [1,1] 与 [1,1] 为两种不同的情况 思路 暴力搜索前
阅读全文
【剑指 Offer II】9 乘积小于 K 的子数组
摘要:题目 链接【剑指 Offer II】009 乘积小于 K 的子数组 描述 给定一个正整数数组 nums和整数 k ,请找出该数组内乘积小于 k 的连续的子数组的个数。 输入与输出 输入: nums = [10,5,2,6], k = 100 输出: 8 解释: 8 个乘积小于 100 的子数组分别为
阅读全文
【剑指 Offer II】8 和大于等于 target 的最短子数组
摘要:题目 链接【剑指Offere II】008 和大于等于 target 的最短子数组 描述 给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其
阅读全文
【剑指 Offer II】7 数组中和为 0 的三个数
摘要:题目 链接【剑指Offer II】007 数组中和为 0 的三个数描述 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a ,b ,c ,使得 a + b + c = 0 ?请找出所有和为 0 且 不重复 的三元组。 总结: 三个数字;和为 0;得到的结果集合不重复。
阅读全文
【剑指 Offer II】6 排序数组中两个数字之和
摘要:题目 链接【剑指Offer II】006 排序数组中两个数字之和描述 给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 0 开始计数 ,所以答案
阅读全文
【剑指 Offer II】 5 单词长度的最大乘积
摘要:题目 链接【剑指Offer II】 005 单词长度的最大乘积 描述 给定一个字符串数组 words,请计算当两个字符串 words[i] 和 words[j] 不包含相同字符时,它们长度的乘积的最大值。假设字符串中只包含英语的小写字母。如果没有不包含相同字符的一对字符串,返回 0。 输入与输出 输
阅读全文
【剑指 Offer II】 4 只出现一次的数字
摘要:题目 链接【剑指Offer II】004 只出现一次的数字 描述 给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰>出现 三次 。请你找出并返回那个只出现了一次的元素。 进阶:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 输入与输出 输入:nums =
阅读全文
如何不使用四则运算符计算两数相加?
摘要:题目描述 描述 输入两个整数 a 和 b,不使用四则运算符的情况下,计算两个数相加。 输入与输出 输入:a = 10, b = 20 输出:30 思路 不使用四则运算符运算符,那么就只能使用位运算了。那么如何使用位于那算符呢? 核心需要做两件事 明确哪些不需要进位;明确哪些需要进位。 例如 a =
阅读全文
【剑指 Offer II】 3 前 n 个数字二进制中 1 的个数
摘要:题目 链接【剑指Offer】 003 前 n 个数字二进制中 1 的个数描述 给定一个非负整数 n ,请计算 0 到 n 之间的每个数字的二进制表示中 1 的个数,并输出一个数组。 输入与输出 输入: n = 2 输出: [0,1,1] 解释: 0 --> 0 1 --> 1 2 --> 10 思路
阅读全文
【剑指 Offer II】2 二进制加法
摘要:题目 链接 【剑指Offer II】 002 二进制加法描述 给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。输入为 非空 字符串且只包含数字 1 和 0。 总结一下 相当于高精度加法去掉前导 0 输入与输出 输入: a = “11”, b = “10” 输出: “
阅读全文
【剑指 Offer II】1 整数除法
摘要:题目 链接 【剑指Offer II】 001 整数除法描述 给定两个整数 a 和 b ,求它们的除法的商 a/b ,要求不得使用乘号 ‘*’、除号 ‘/’ 以及求余符号 ‘%’ 。 注意: 整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 tr
阅读全文
创建线程的几种方式
摘要:目录 继承 Thread 类创建线程实现 Runnable 接口创建线程Thread 匿名内部内创建线程Runnable 匿名内部类创建线程lambda 表达式创建线程使用 Callable 创建线程(需要 FutureTask 类来辅助) 继承 Thread 类创建线程 class ThreadT
阅读全文
进程和线程的区别
摘要:区别 进程包含线程 一个进程可以有一个或多个线程 进程是资源分配的基本单位,线程是系统调度执行的基本单位 也就是说,进程得到一部分资源后,一个和多个线程共享这部分资源 进程与进程之间是相互独立的 也就是说,进程 A 凉了,不影响进程 B。 因为一个线程或多个线程共享一个进程的资源,所以一个线程挂了,
阅读全文
初识进程,为后面多线程编程打基础!
摘要:目录 什么是进程?为什么要引入进程?怎样概述进程?task struck 中存在哪些信息? 什么是并行与并发?用户态与内核态 什么是进程? 概念:一个正在运行的程序。示例 进程也叫做任务, 任务管理器中就存在很多进程。 为什么要引入进程? 希望能够执行多个任务,也就是多个进程。 什么意思呢?也就是说
阅读全文
浏览器输入 URL 后会发生什么呢?
摘要:目录 以访问 CSDN 为例传输过程1. DNS 域名解析2. TCP 建立连接3. 客户端给服务器发送 HTTP/HTTPS 请求4. TCP / IP 传输数据5. IP 传输数据6. 数据链路层7. 服务器解析数据 应用程序处理1. 服务器收到数据2. 服务器返回数据 以访问 CSDN 为例
阅读全文
DNS 协议浅析(网络不存在问题,无法访问服务器的解决方法)
摘要:目录 什么是 DNS ?什么是域名解析 ?域名解析原理保存在本地 hosts 文件中通过 DNS 服务器 网络不存在问题,无法访问服务器解决方法 什么是 DNS ? DNS 是 应用层协议,核心作用就是 对域名的解析; 什么是域名解析 ? 比如访问 百度,只需要输入 www.baidu.com 即可
阅读全文
微信发朋友圈测试用例
摘要:测试分类 根据测试对象划分 性能测试安全测试兼容性测试文档测试易用性测试(用户体验测试)业务测试界面测试安全测试 图片在最下方 界面测试 字体大小图片视频转发编辑权限排版 功能测试 入口(发朋友圈入口)内容(只发文字 / 文字+图片 / 视频)数量(照片数量 / 文字数量 / 视频数量)转发(转发
阅读全文
递归全排列(Java)
摘要:题目 给定一个数组 nums ,求出它所有的全排列。 输入 int[] nums = {1,2,3} 输出 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 思路 交换元素,得到不同组合;递归;回溯,还原数组。 代码 代码 static List<List<Integer>>
阅读全文
路由与 “问路“
摘要:什么是路由? 路由:在复杂的网络结构中,找出一条通往目的的路线。 网络结构是很复杂的,其中连接着很多路由器,如果主机 A 想给主机 B 发送一条数据,那么就要选择一条正确的路线来进行发送。具体解析如下。 示例 场景演示 蓝色框: 路由表; 红线:路由。 主机 A 给主机 B 发送一条数据,当路由器
阅读全文
解决 IPv4 不够用的几种方案(动态分配、NAT机制、IPv6)
摘要:目录 IPv4 不够使用的原因动态分配NAT机制示例NAT 机制与代理服务器的区别为什么部署项目要在外网 IP 上。 升级 IPv6 IPv4 不够使用的原因 IPv4 能够表示的 IP 地址数量: 256 * 256 * 256 * 256 = 4,228,250,625。(42 亿多个 IP地址
阅读全文
网段划分 + 子网掩码相关计算
摘要:网段划分 IP 地址分为两部分,网络号与主机号 网络号:一个局域网的 IP 地址主机号:一个局域网内不同主机的 IP 地址 不同的局域网网络号不能相同 同一个局域网的主机号不能相同 传统划分 A类 0.0.0.0到127.255.255.255B类 128.0.0.0到191.255.255.255
阅读全文
【LeetCode 40】 组合问题II(Java)
摘要:题目 链接: 组合问题II 题目描述: 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。 注意:解集不能包含重复的组合。 输入 candidates
阅读全文
IP 报文格式浅析
摘要:报文格式 IP 报文格式图片如下 4 位版本:即 IP 协议的版本,目前只有 IPv4 和 IPv6 两个版本,因此 4 个 bit 足够表示版本号;4 位首部长度:与 TCP 中 4位首部长度单位一样,单位都是 4 个字节,比如此时该 4 - 8 位都为 1,能表示的最大长度为 15,因此首部长度
阅读全文
如何基于 UDP 实现大数据包的发送
摘要:如何基于 UDP 实现大数据包发送? 在 IP 协议中,存在以首部报文: 16 位标识:用来标识哪些包是同一个包拆分出来的;3 位标志:通过这个片偏移来区分拆出来的包的顺序。即谁在前谁在后;13 位片偏移:识别当前拆出来的包是否是最后一个包,如果标志位为 0,则标志着到达最后一个分片。类似于链表用
阅读全文
TCP 报文格式浅析
摘要:16 位源端口号:从哪个进程来;16 位目的端口号:到哪个进程去;32 位序号:给数据编的号,第一个数据有一个编号,第二个数据有一个编号…通过编号来确定数据之间的先后顺序;32 位确认序号(可靠性):有特定含义,表示接下来想要的下一条数据编号是多少,而不是收到的数据编号是啥; 发送方 收到 应答数据
阅读全文
如何基于 UDP 实现可靠传输
摘要:如何基于 UDP 实现可靠传输? 修改内核驱动程序(当前我不考虑)在应用层(应用程序)保证可靠性 UDP 想要实现可靠传输,那么就可以考虑使用 TCP 协议中保证 TCP 协议可靠性的机制。 确认应答超时重传序号与确认序号连接管理(三次握手与四次挥手)流量控制拥塞控制异常情况 在此基础上也可以提高效
阅读全文
TCP 中的异常情况与心跳包
摘要:目的 提高 TCP 协议的稳定性 示例 场景一,关闭程序: 比如我把 Tomcat 关掉,那么部署在 Tomcat 上的应用程序还是会进行 四次挥手,和普通的 四次挥手 没有区别。 场景二,机器重启: 按照正常的流程重启,此时系统会先杀死进程,也就会出发 四次挥手;可能会导致 挥手完成不了的情况。
阅读全文
TCP 中面向字节流与粘包问题
摘要:什么是面向字节流? 两台主机完成建立连接,也就是三次握手后,各自会在内核维护一对缓冲区,即 接收缓冲区 和 发送缓冲区 主机 A 给主机 B 发送一个 “你好,逍遥”,此时主机 A 调用系统的 send 方法将 “你好,逍遥” 发送到主机 A 的发送缓冲区,等到这个数据通过网络传输到主机 B 的接受
阅读全文
TCP 中捎带应答机制
摘要:目的 提高 TCP 协议效率的机制 与 延迟应答 一起作用提高 TCP 效率。 示例 背景:我去淘宝店买衣服 场景一: 我:第一天买了一件短袖; 店家第一天没有发货 … 我:第二天又在同一家淘宝店买了一条裤子; 店家今天发货了,将我昨天买的衣服和今天买的裤子一同发货。 这就是 捎带应答,如果店家衣服
阅读全文
TCP 中延迟应答机制
摘要:目的 提高 TCP 协议效率的机制 和 滑动窗口 密切相关 示例 背景:我是一个超市供货员 场景一 我:今天 早上 给超市老板送了 100 箱冰红茶。 老板:仓库还能放下 90 箱 冰红茶,你明天 早上 给我送 90 箱来。 … 第二天 我:早上 给老板送了 90 箱冰红茶。 老板:仓库能放下 12
阅读全文
TCP 中拥塞控制机制
摘要:目的 提高 TCP 协议可靠的机制 也是控制 滑动窗口 大小的机制。 示例 场景一 女朋友:我重要还是游戏重要? 我:游戏重要。 女朋友:我漂亮还是你前女友漂亮? 我:都还行,不过前女友更高。 女朋友:给你三分钟重新组织语言的机会。 我:我说得没错啊! 女朋友:分手吧,我们不合适! 我:?????
阅读全文
TCP 中流量控制机制
摘要:目的 提高 TCP 协议稳定性的机制 示例 场景一 绿色的数字代表 接收方 能够接收的数据是多少。发送方 每次会收到 接收方 的一个缓存空间的大小,来决定发送数据的多少。当 接收方 不能接收数据后,过一段时间如果 接收方 还没有发送 窗口更新 通知,那么 发送方 就会发送一个 应用数据为 0 的探测
阅读全文
TCP 中滑动窗口机制
摘要:目的 提高 TCP 协议效率的机制 示例 场景一,未使用滑动窗口 这样 一发一收 的方式效率比较低,那么我们一次发送多条数据(也就是多个段的等待时间重叠在一起了),统一等待 ACK,就可以大大提高性能。 场景二,使用滑动窗口 蓝色框表示已经发送的数据有哪些 当收到 ACK(2001)后,表示 200
阅读全文