- 博客(232)
- 资源 (1)
- 收藏
- 关注
原创 基础算法 —— 代码模板
public class Solution { /** * @param nums: The integer array. * @param target: Target to find. * @return: The first position of target. Position starts from 0. */ public int binarySearch(int[] nums, int target) { if (
2022-02-23 13:59:09 394
原创 后端开发知识地图
八股文MQ(Kafka总结)微服务组件总结JVM总结MySQL总结并发多线程总结Redis总结线程池总结操作系统总结计算机网络总结Java基础知识总结Spring总结Linux总结项目数据结构与算法算法题总结...
2021-06-16 17:04:13 453 4
原创 面试算法题高频200(PART1)
反转链表输入一个链表,反转链表后,输出新链表的表头。public class Solution { public ListNode ReverseList(ListNode head) { ListNode prev = null; ListNode curr = head; while (curr != null) { ListNode cnext = curr.next; if (prev ==
2021-05-06 20:34:54 45
原创 JVM萌新入手大全
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RhKvGwQe-1616334581147)(https://i.loli.net/2020/02/26/rY2Q6bXhUDLNSkR.png)]内存泄漏可达性分析用什么数据结构比较好(JVM)运行时数据区(JVM)创建对象的过程(JVM)判断一个对象是否被回收(JVM)新生代和老年代用的垃圾回收策略对象的创建与内存分配String存储在常量池解析将一部分(编译期可知,运行期不可变)的符号引用转为直接
2021-03-21 21:53:15 207 2
原创 MySQL必知必会
MYSQL1.数据库设计(三范式)第一范式(1NF)第一范式就是属性不可分割,每个字段都应该是不可再拆分的。比如一个字段是姓名(NAME),在国内的话通常理解都是姓名是一个不可再拆分的单位,这时候就符合第一范式;但是在国外的话还要分为FIRST NAME和LAST NAME,这时候姓名这个字段就是还可以拆分为更小的单位的字段,就不符合第一范式了。数据库表中的任何字段都是单一属性的,不可再分第二范式(2NF)第二范式就是要求表中要有主键,表中其他其他字段都依赖于主键,因此第二范式只要记住主键约
2021-03-20 00:58:05 484 2
原创 Java多线程导论及延申
并发大全JUC大全2万字参透并发编程jvm中线程分为哪些状态在执行Thread.start()方法后,线程是不是马上运行。多线程导论原子性是指在一个操作中就是cpu不可以在中途暂停然后再调度,既不被中断操作,要不执行完成,要不就不执行。可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。有序性即程序执行的顺序按照代码的先后顺序执行。多线程设计模式解读—Producer-Consumer模式请简述一下线程的sleep()方法和yi.
2021-03-16 16:54:28 1653 9
原创 《Java并发编程的艺术》读书笔记
Java并发编程的艺术ch1 并发编程的调整1.1上下文切换在单核CPU的情况下,也存在上下文切换的概念(时间片)任务的状态从保存到再加载就是一次切换在数据量少的情况下,串行有可能比并发编程效率高使用Lmbench测试上下文切换时长,vmstat统计切换次数减少上下文切换的方法无锁并发编程CAS算法(Java的Atomic包)使用最少线程,避免不必要的创建实战减少上下文切换用jstack命令dump线程信息,查看对应PID的线程在做什么统计线程分别处于什么状态
2021-02-08 22:44:13 269 3
翻译 Redis终极总结
为什么我们做分布式使用Redis?Redis面试连环问,快看看你能走到哪一步!Redis的高级面试题 分布式关于分布式锁原理的学习和思考[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sXmucQcf-1599015178926)(https://i.loli.net/2020/02/21/5DmVsLYKJ9Gj821.png)]Redis的优缺点Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作
2020-09-02 10:53:35 579
原创 JUC中的线程池
深度解读 Java线程池设计思想及源码实现java 线程池有哪些关键属性?corePoolSize,maximumPoolSize,workQueue,keepAliveTime,rejectedExecutionHandlercorePoolSize 到maximumPoolSize之间的线程会被回收,当然 corePoolSize的线程也可以通过设置而得到回收(allowCoreThreadTimeOut(true))。workQueue 用于存放任务,添加任务的时候,如果当前线程数超过
2020-09-02 10:52:44 1076
原创 操作系统基础知识
堆和栈的区别堆一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,分配方式类似于链表。堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些堆可以被看成是一棵树,如:堆排序。三种多路复用IO实现方式:select,poll,epoll的区别栈由操作系统(编译器)自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈栈使用的是一级缓存, 它们通常都是被调用时处于存储空间中,调
2020-09-02 10:51:41 488
原创 计算机网络基础知识
计算机网络常见面试题经典面试题:从 URL 输入到页面展现到底发生什么之会话顺序?TCP/IP数据报域名解析,其实就是根据用户输入的网址去寻找它对应的IP地址,比如输入www.baidu.com的网址就会经历以下过程先从浏览器缓存里找IP,因为浏览器会缓存DNS记录一段时间如没找到,再从Hosts文件查找是否有该域名和对应IP如没找到,再从路由器缓存找如没好到,再从DNS缓存查找如果都没找到,浏览器域名服务器向根域名服务器(baidu.com)查找域名对应IP,还没找到就把请求转发到下一.
2020-09-02 10:50:50 1428 1
原创 Java基础知识
面试题汇总Java语言基础篇JAVA面试题内存模型Java基础知识Object类所有方法详解[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dlo5a9kZ-1599014901709)(https://i.loli.net/2020/03/10/gXTzZqK16Ju4VGc.png)]反射与注解getClass获取的类的类型。getDeclaredField获取声明字段调用方法正则表达式i++和++i的真正区别在java的执行过程中,i++和++
2020-09-02 10:48:59 220
原创 Spring基础知识
注入方式还有注解注入,官方推荐使用构造器注入,理由如上。Spring内置Tomcat的原理spring概述加载、注册进去,此接口两个方法: postProcessBeforeInitialization 和 postProcessAfterInitialization// 两个方法分别在 Bean 初始化之前和初始化之后得到执行。注意,到这里 Bean 还没初始化根据IOC里面的注册表实例化bean,放到一个BUFFER POOL里面 ,用到的时候回调用它bean生命周期Spring中
2020-09-02 10:38:39 717
原创 Linux上进行文本文件的操作
打印一个文本的第10行#解法一tail -n +10 filename 从第10行输出#解法二: sedsed -n '10p' file.txt 打印第10 行内容sed -n '9, 10p' file.txt解法三:awkNR: awk 读取的记录行数FNR:cat file.txt | awk 'NR==10'
2020-08-31 16:22:52 588 2
翻译 分布式事务,两阶段提交协议,三阶段提交协议
一 分布式中的CAP怎么理解1 CAPC(Consistency)一致性 每一次读取都会让你得到最新的写入结果A (Availability)可用性 每个节点(如果没有失败),总能执行查询(读取和写入)操作P (Partition Tolerance)分区容忍性 即使节点之间的连接关闭,其他两个属性也会得到保证CAP理论认为,任何联网的共享数据系统智能实现三个属性中的两个,但是可以通过明确处理分区,优化一致性和可用性,从而实现三者之间的某种权衡2 zookeeper提供的一致性服务
2020-07-30 15:46:06 241
原创 2020年,记录从台湾本科学校毕业后的一年我都做了什么(不定期更新)
自我介绍He is senior student at the school of Computer Science at National Taiwan University of Science and Technology, Taipei. Currently,The GPA 3.79 / 4.30During the course. his research interests include Pattern Recognization, social networks and network s
2020-07-15 22:28:41 1691
原创 算法题基础操作
向数组末尾直接添加元素不可行,因为Java中的数组是固定长度的。但是,您可以使用 Arrays.copyOf(array, size) 从现有数组构建一个新数组。分别使用removeFirst() 移除头部元素,使用 removeLast() 移除尾部元素。分别用函数addFirst() 在头部添加元素,addLast() 在尾部添加元素。
2023-01-06 22:34:52 135 1
原创 面试题 04.06. 后继者(BST)
面试题 04.06. 后继者设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。如果指定节点没有对应的“下一个”节点,则返回null。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */c
2022-05-16 21:23:37 175
原创 812. 最大三角形面积
812. 最大三角形面积class Solution { public double largestTriangleArea(int[][] points) { int n = points.length; double ret = 0.0; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { for (i
2022-05-15 21:16:44 135
原创 713. 乘积小于 K 的子数组(双指针)
713. 乘积小于 K 的子数组给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目。示例 1:输入:nums = [10,5,2,6], k = 100输出:8解释:8 个乘积小于 100 的子数组分别为:[10]、[5]、[2],、[6]、[10,5]、[5,2]、[2,6]、[5,2,6]。需要注意的是 [10,5,2] 并不是乘积小于 100 的子数组。示例 2:输入:nums = [1,2,3], k = 0输出:0c
2022-05-05 22:26:06 226
原创 1305. 两棵二叉搜索树中的所有元素
1305. 两棵二叉搜索树中的所有元素归并排序/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode l
2022-05-01 14:00:00 401
原创 868. 二进制间距
868. 二进制间距给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,“1001” 中的两个 1 的距离为 3 。思路n & 1 == 1是奇数,获取 nn 的最低位,判断其是否为 1找到所有的1,从低位开始遍历。class Solution { public in
2022-04-24 20:37:56 125
原创 Rotate Function
396. Rotate FunctionYou are given an integer array nums of length n.Assume arrk to be an array obtained by rotating nums by k positions clock-wise. We define the rotation function F on nums as follow:F(k) = 0 * arrk[0] + 1 * arrk[1] + ... + (n - 1) * ar
2022-04-22 22:22:00 270
原创 386. Lexicographical Numbers
386. Lexicographical NumbersGiven an integer n, return all the numbers in the range [1, n] sorted in lexicographical order.You must write an algorithm that runs in O(n) time and uses O(1) extra space.Example 1:Input: n = 13Output: [1,10,11,12,13,2,3,4
2022-04-18 21:38:38 202 2
原创 380. O(1) 时间插入、删除和获取随机元素(必会,变长数组 + 哈希表)
380. O(1) 时间插入、删除和获取随机元素class RandomizedSet { List<Integer> nums; Map<Integer, Integer> indices; Random random; public RandomizedSet() { nums = new ArrayList<Integer>(); indices = new HashMap<Integer,
2022-04-13 23:37:32 188
原创 357. 统计各位数字都不同的数字个数(排列组合)
357. 统计各位数字都不同的数字个数给你一个整数 n ,统计并返回各位数字都不同的数字 x 的个数,其中 0 <= x < 10n 。示例 1:输入:n = 2输出:91解释:答案应为除去 11、22、33、44、55、66、77、88、99 外,在 0 ≤ x < 100 范围内的所有数字。 示例 2:输入:n = 0输出:1// n = 1 0到9 10位数// n = 2 10 + 9 X 9 (第一个9是1-9,第二个9是0-9),第一个9因为不能
2022-04-11 22:29:39 292
原创 804. 唯一摩尔斯密码词(对照转换)
804. 唯一摩尔斯密码词给你一个字符串数组 words ,每个单词可以写成每个字母对应摩尔斯密码的组合。例如,“cab” 可以写成 “-.-…–…” ,(即 “-.-.” + “.-” + “-…” 字符串的结合)。我们将这样一个连接过程称作 单词翻译 。对 words 中所有单词进行单词翻译,返回不同 单词翻译 的数量。class Solution { public static final String[] MORSE = {".-", "-...", "-.-.", "-..", "
2022-04-10 15:24:06 222
原创 204. 计数质数
204. 计数质数给定整数 n ,返回 所有小于非负整数 n 的质数的数量 。1和2不是质数class Solution { public int countPrimes(int n) { int ans = 0; for (int i = 2; i < n; ++i) { ans += isPrime(i) ? 1 : 0; } return ans; } public boolea
2022-04-05 16:52:13 310
原创 位运算模版
191. 位1的个数public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { int ret = 0; while (n != 0) { n &= n - 1; ++ret; } return ret; }}..
2022-04-05 16:39:20 222
原创 954. 二倍数对数组(map统计次数)
954. 二倍数对数组给定一个长度为偶数的整数数组 arr,只有对 arr 进行重组后可以满足 “对于每个 0 <= i < len(arr) / 2,都有 arr[2 * i + 1] = 2 * arr[2 * i]” 时,返回 true;否则,返回 false。示例 1:输入:arr = [3,1,3,6]输出:false示例 2:输入:arr = [2,1,2,6]输出:false示例 3:输入:arr = [4,-2,2,-4]输出:true解释:可以用 [-2,
2022-04-01 23:17:06 450
原创 ABC244
A - Last LetterGiven a string S of length N consisting of lowercase English alphabets, print the last character of S.import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in);
2022-03-25 22:51:48 495
原创 2038. 如果相邻两个颜色均相同则删除当前颜色
2038. 如果相邻两个颜色均相同则删除当前颜色总共有 n 个颜色片段排成一列,每个颜色片段要么是 ‘A’ 要么是 ‘B’ 。给你一个长度为 n 的字符串 colors ,其中 colors[i] 表示第 i 个颜色片段的颜色。Alice 和 Bob 在玩一个游戏,他们 轮流 从这个字符串中删除颜色。Alice 先手 。如果一个颜色片段为 ‘A’ 且 相邻两个颜色 都是颜色 ‘A’ ,那么 Alice 可以删除该颜色片段。Alice 不可以 删除任何颜色 ‘B’ 片段。如果一个颜色片段为 ‘B’ 且
2022-03-23 00:53:35 4334
原创 653. 两数之和 IV - 输入 BST
653. 两数之和 IV - 输入 BST给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。DFSclass Solution { Set<Integer> set = new HashSet<Integer>(); public boolean findTarget(TreeNode root, int k) { if (root == null) {
2022-03-21 18:45:48 297
原创 AcWing787. 归并排序
import java.util.Scanner;public class Main { static final int N = 100010; static int[] arr = new int[N]; static int[] tmp = new int[N]; // 临时数组, 用于临时存储排好序的数据 public static void main(String[] args) { // 对输入值进行初始化 Scanner
2022-03-20 21:55:51 175
原创 912. 排序数组(快排)
912. 排序数组import java.util.Arrays;public class Solution { public int[] sortArray(int[] nums) { quicksort(nums, 0, nums.length - 1); return nums; } public static void quicksort(int[] q, int l, int r){ if (l >= r){
2022-03-20 21:31:32 473
原创 606. 根据二叉树创建字符串
606. 根据二叉树创建字符串你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode
2022-03-19 21:42:52 47
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人