- 博客(190)
- 资源 (10)
- 收藏
- 关注

原创 【资料分享】23届上岸字节、快手等大厂
【资料分享】2023年前前后后共参加面试100+个,最终收获字节跳动、快手、蔚来、科大讯飞、地平线、贝壳、用友等后端开发岗位10+个offer。
2023-02-21 19:43:19
371

原创 基于SpringBoot+Redis+MySQL实现秒杀系统(一)
秒杀系统1. 秒杀系统1.1 秒杀场景电商抢购限量商品卖周董演唱会的门票火车票抢座 12306…1.2 为什么要做个系统如果你的项目流量非常小,完全不用担心有并发的购买请求,那么做这样一个系统意义不大。但如果你的系统要像12306那样,接受高并发访问和下单的考验,那么你就需要一套完整的流程保护措施,来保证你系统在用户流量高峰期不会被搞挂了。严格防止超卖:库存100件你卖了120件,等着辞职吧防止黑产:防止不怀好意的人群通过各种技术手段把你本该下发给群众的利益全收入了囊中。
2020-11-26 21:01:00
1093
2
原创 Zookeeper
ZAB Zookeeper如何保证分布式数据一致性?(蚂蚁1)Zookeeper 设计为只有一台客户端(Leader)负责处理外部的写事务请求,然后Leader 客户端将数据同步到其他 Follower 节点。ZooKeeper 保证分布式系统数据一致性的核心算法就是** ZAB 协议**(ZooKeeper Atomic Broadcast,原子消息广播协议)。ZAB 借鉴了 Paxos 算法,ZooKeeper能够保证数据一致性主要依赖于 ZAB 协议的 消息广播、崩溃恢复和数据同步 三个过程。.
2022-04-27 14:30:00
433
原创 RocketMQ
各种MQ的对比?项目是如何选型的?KafkaRocketMQRabbitMQ单机吞吐量10万级10万级万级开发语言Scala/JavaJavaErlang高可用分布式架构分布式架构主从架构订阅形式基于topic,按照topic进行正则匹配的发布订阅模式基于topic/messageTag,按照消息类型、属性进行正则匹配的发布订阅模式提供了4种:direct, topic ,Headers和fanout。fanout就是广播模式性能稳.
2022-04-27 13:30:00
1330
原创 Spring、Spring MVC、Spring Boot、MyBatis
Spring综述什么是Spring?Spring框架的优点?轻量:Spring是轻量的,基本的版本大约2MB。控制反转(IOC): Spring 通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。**面向切面的编程(AOP):**Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。容器:Spring 包含并管理应用中对象的生命周期和配置。MVC框架:Spring的 Web框架是个精心设计的框架,是 Web框架的一个很好的替代品。事务管理:Spr.
2022-04-27 11:00:00
380
原创 Java虚拟机
JVM主要组成部分及其作用?类加载器(ClassLoader)运行时数据区(Runtime Data Area)执行引擎(Execution Engine)本地库接口(Native Interface)作用:首先通过类加载器(ClassLoader)会把 Java 代码转换成字节码,运行时数据区(Runtime Data Area)再把字节码加载到内存中,而字节码文件只是 JVM 的一套指令集规范,并不能直接交给底层操作系统去执行,因此需要特定的命令解析器执行引擎(Execution En..
2022-04-27 10:00:00
198
原创 Java集合
一、集合容器概述常见的集合类有哪些?常见容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表。说一下List、Set和Map三者的区别?ListSetMap特点有序、元素可重复、可添加多个null元素无序、元素不可重复、只可添加一个nullKey-Value键值对,key无序但是唯一实现类ArrayList、LinkedList、VectorHashSet、Linked.
2022-04-27 09:00:00
103
原创 Java集合
一、集合容器概述常见的集合类有哪些?常见容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表。说一下List、Set和Map三者的区别?ListSetMap特点有序、元素可重复、可添加多个null元素无序、元素不可重复、只可添加一个nullKey-Value键值对,key无序但是唯一实现类ArrayList、LinkedList、VectorHashSet、Linked.
2022-04-27 08:00:00
100
原创 Java基础
Java面向对象面向对象和面向过程的区别?面向对象是一种基于面向过程的编程思想,是向现实世界模型的自然延伸,这是一种“万物皆对象”的编程思想。由执行者变为指挥者,在现实生活中的任何物体都可以归为一类事物,而每一个个体都是一类事物的实例。面向对象的编程是以对象为中心,以消息为驱动。区别:编程思路不同:面向过程以实现功能的函数开发为主,而面向对象要首先抽象出类、属性及其方法,然后通过实例化类、执行方法来完成功能。封装性:都具有封装性,但是面向过程是封装的是功能,而面向对象封装的是数据和功能。面.
2022-04-26 23:10:22
610
原创 JVM面试题
一、JVM类加载从源代码(.java)到代码的执行过程?4步:编译->加载->解释->执行编译:将.java文件变成.class文件的过程,其中会进行语法分析、语义分析、注解处理等操作。加载:由类加载器将.class字节码文件加载到JVM中的过程装载:通过一个类的全限定名来获取其定义的二进制字节流;将这个字节流所代表的静态存储结构转化为方法区...
2022-02-20 23:41:03
54
原创 Java并发面试题
第1章 Java线程系统线程数量上限是多少?一个线程的栈要预留1M的内存空间,而一个进程中可用的内存空间只有2G,所以理论上一个进程中最多可以开2048个线程,但是内存当然不可能完全拿来作线程的栈,所以实际数目要比这个值要小。可以通过连接时修改默认栈大小,将其改的比较小,这样就可以多开一些线程。如将默认栈的大小改成512K,这样理论上最多就可以开4096个线程。即使物理内存...
2022-02-20 23:40:13
102
原创 Java集合面试题
一、集合容器概述常见的集合类有哪些?Map接口和Collection接口是所有集合框架的父接口。下图中的实线和虚线看着有些乱,其中接口与接口之间如果有联系为继承关系,类与类之间如果有联系为继承关系,类与接口之间则是类实现接口。重点掌握的抽象类有HashMap,LinkedList,HashTable,ArrayList,HashSet,Stack,TreeSet,TreeMap。注...
2022-02-20 23:39:00
73
原创 Java基础面试题
Java如何从源代码转换成机器码执行的?.java文件.class文件(JVM可理解的Java字节)机器可执行的二进制机器码用Javac编译器将Java源代码编译成我们常见的.class文件,然后程序在运行时,JVM将需要用到的.class文件加载到内存中,从class文件中逐行读出一条指令,JVM中解释器解释一条指令,接着执行一条指令,如我们上面所说,边解释边执行,从而达到将.class...
2022-02-20 23:38:09
78
原创 RocketMQ面试题
RocketMQ在实习项目中的应用?我们项目中用RocketMQ就是来做异步解耦的,将上游的流量匹配任务发送到MQ中,下游任务监控MQ是否有数据到达,如果有数据到达就去执行流量匹配程序。这样能够实现异步操作,增加上游系统的并发和降低系统的压力。有一个回调任务去根据上游任务生成的任务号去查询任务的执行状态。各种MQ的对比?项目是如何选型的?ActiveMQ:ActiveMQ是使用Java...
2022-02-18 23:00:03
81
原创 基于SpringBoot+Redis+MySQL实现秒杀系统(二)
1.实现基本购买商品功能;2.使用Jmeter测试没加防护措施的情况下是否会出现商品超卖的现象。3.分别采用悲观锁和乐观锁来解决商品超卖现象;4.对比两种实现方式的优缺点和应用场景。3.采用悲观锁和乐观锁来解决商品超卖现象3.1实现购买商品功能说明: 使用乐观锁解决商品的超卖问题,实际上是把主要防止超卖问题交给数据库解决,利用数据库中定义的version字段以及数据库中的事务实现在并发情况下商品的超卖问题。...
2021-07-01 20:41:02
334
原创 单调栈系列~LeetCode1019.链表的下一个更大的节点(中等)
思路:将链表转换成列表存储,因为列表的查询速度快。如果当前元素比栈顶元素的值还要大,并且栈不为空,那么一直弹栈,弹出来的元素对应的更大的数就是当前要进栈的数。如果不满足上述条件就将当前元素的下标进栈。如果所有元素都遍历结束,栈中还有元素,那么说明栈中的元素后面没有比他自己更大的元素。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next;.
2020-12-05 20:26:59
263
1
原创 单调栈系列~LeetCode84.柱状图中最大的矩形(困难)
class Solution { public int largestRectangleArea(int[] heights) { int len = heights.length; int []left = new int[len]; int []right = new int[len]; Stack<Integer> stack = new Stack<>(); for(int i=0; i.
2020-12-02 17:17:44
187
原创 单调栈系列~LeetCode739.每日温度(中等)
实现思路:利用单调栈的思路求出元素的下一个更大元素。Stack用来存储数组下标。当前元素的值大于栈顶元素 && 栈不为空 -> 将栈顶元素(index)弹出,栈顶的值对应的元素的下一个更大的元素是 当前元素。不满足前一个条件的时候将当前元素的下标入栈。class Solution { public int[] dailyTemperatures(int[] T) { Stack<Integer> stack = new Stack.
2020-12-02 16:35:30
171
原创 单调栈系列~LeetCode503.下一个更大元素II(中等)
class Solution { public int[] nextGreaterElements(int[] nums) { Stack<Integer> stack = new Stack<>(); int [] res = new int[nums.length]; for(int i=2*nums.length -1; i>=0; i--){ while(!stack.isEmpty() .
2020-12-02 15:50:36
154
原创 单调栈系列~LeetCode496.下一个更大元素I(简单)
实现思路:12class Solution { public int[] nextGreaterElement(int[] nums1, int[] nums2) { Stack<Integer> stack = new Stack<>(); Map<Integer, Integer> map = new HashMap<>(); for(int i=0; i<nums2.length;.
2020-12-02 11:10:10
159
原创 PriorityQueue优先级队列!
优先队列的作用是能保证每次取出的元素都是队列中权值最小的。元素大小的评判可以通过元素本身的自然顺序,也可以通过构造时传入的比较器(Comparator)。java中PriorityQueue实现了Queue接口,不允许放入null元素;其通过堆实现,具体说是通过完全二叉树(complete binary tree)实现的小顶堆(任意一个非叶子节点的权值,都不大于其左右子节点的权值),也就意味着可以通过数组来作为PriorityQueue的底层实现。总结1>PriorityQueue是一种无界的,
2020-10-23 15:27:38
201
原创 Collections类的常用方法!
1.sort(Collection)方法的使用(含义:对集合进行排序)。public class Practice { public static void main(String[] args){ List c = new ArrayList(); c.add("l"); c.add("o"); c.add("v"); c.add("e");
2020-10-05 15:12:23
2830
原创 compareTo()方法
1.返回参与比较的前后两个字符串的ASCII码的差值,如果两个字符串首字母不同,则该方法返回首字母的ASCII码的差值。String a1 = "a";String a2 = "c"; System.out.println(a1.compareTo(a2));//结果为-22.参与比较的两个字符串如果首字符相同,则比较下一个字符,直到有不同的为止,返回该不同的字符的asc码差值。String a1 = "aa";String a2 = "ad"; System.o
2020-09-24 15:12:02
75732
2
原创 Java集合框架!
Java集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue。Java集合框架常用的实现类有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap、TreeMap等等。此外还有一个实现算法的Collections类。...
2020-09-22 21:43:38
141
原创 Queue常用方法!
1.获取并移除poll() 获取并移除此队列的头,如果此队列为空,则返回 nullremove() 获取并移除此队列的头,如果此队列为空,则抛出NoSuchElementException异常2.获取但不移除peek() 获取队列的头但不移除此队列的头。如果此队列为空,则返回 null3.添加元素的方法offer() 将指定的元素插入此队列(如果立即可行且不会违反容量限制),插入成功返回 true;否则返回 false。当使用有容量限制的队列时,offer方法通常要优于 add方法
2020-09-22 21:08:35
1218
原创 Arrays常用方法!
1、填充数组:fillint []arr = new int[5];Arrays.fill(arr, 2);output(arr);结果是:2 2 2 2 2分析:给所有值赋值2int []arr = new int[5];Arrays.fill(arr, 1,3,8);output(arr);结果是:0 8 8 0 0分析:给第1位(0开始)到第3位(不包括)赋值82、数组元素排序:sortint []arr = {3,2,1,5,4};Arrays.sort(arr);o
2020-09-21 12:45:35
1814
原创 String常用方法!
字符串查找String提供了两种查找字符串的方法,即indexOf与lastIndexOf方法。- 1、indexOf(String s)该方法用于返回参数字符串s在指定字符串中首次出现的索引位置,当调用字符串的indexOf()方法时,会从当前字符串的开始位置搜索s的位置;如果没有检索到字符串s,该方法返回-11 String str ="We are students";2 int size = str.indexOf("a"); // 变量size的值是3 - 2、lastIndex
2020-09-19 14:59:39
241
原创 String、StringBuilder和StringBuffer之间的区别
三者速度比较(1)速度比较:String < StringBuffer < StringBuilder(2)String的处理速度比StringBuffer、StringBuilder要慢的多。String的处理速度为什么要比StringBuffer、StringBuilder慢的多?String是不可变的对象StringBuffer是可变对象StringBuilder是可变对象请结合上面的代码理解这个问题:(1)String本身就是一个对象,因为String不可变对象,所以
2020-09-12 12:22:01
523
原创 StringBuilder常用方法!
append(String str)/append(Char c):字符串连接System.out.println("StringBuilder:"+strB.append("ch").append("111").append('c'));//return "StringBuilder:ch111c"toString():返回一个与构建起或缓冲器内容相同的字符串System.out.println("String:"+strB.toString());//return "String:c..
2020-09-12 12:02:03
734
原创 String与StringBuilder、String与char[]、String与int
1. String与char[]互相之间的转换String转char[]char []c = str.toCharArray();char[]转StringString s = c.toString();//任何数据类型都可以通过toString()转换成String类型。2.String与StringBuilder相互转换String转StrigBuilderStringBuilder sb = new StringBuilder("anbsj");StrigBuild
2020-09-12 11:57:08
130
转载 Java中List、int[]、Integer[]之间的互相转换!
import java.util.Arrays;import java.util.List;import java.util.stream.Collectors; public class Main { public static void main(String[] args) { int[] data = {4, 5, 3, 6, 2, 5, 1}; // int[] 转 List<Integer> List<Inte
2020-09-06 20:56:24
786
原创 Java的Stack类
方法描述boolean empty()测试堆栈是否为空。Object peek( )查看堆栈顶部的对象,但不从堆栈中移除它。Object pop( )移除堆栈顶部的对象,并作为此函数的值返回该对象。Object push(Object element)把项压入堆栈顶部。int search(Object element)返回对象在堆栈中的位置,以 1 为基数。...
2020-06-25 00:38:48
216
转载 HashMap和HashSet的区别?
HashSet:HashSet实现了Set接口,它不允许集合中出现重复元素。当我们提到HashSet时,第一件事就是在将对象存储在HashSet之前,要确保重写hashCode()方法和equals()方法,这样才能比较对象的值是否相等,确保集合中没有储存相同的对象。如果不重写上述两个方法,那么将使用下面方法默认实现:public boolean add(Object obj)方法用在Set添加元素时,如果元素值重复时返回 “false”,如果添加成功则返回"true"HashMap:Ha
2020-06-24 22:51:07
2268
原创 剑指Offer56-按之字形顺序打印二叉树
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/import java.util.S
2020-06-15 18:58:45
172
1
原创 剑指Offer55-把二叉树打印成多行
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } }*/import java.util.ArrayList;import java.util.Queue;im
2020-06-15 18:24:46
203
原创 剑指Offer54- 数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0public class Solution { public double Power(double base, int exponent) { double result=1; for(int i=0;i<Math.abs(exponent);i++){ result*=base;
2020-06-13 13:00:41
179
原创 剑指Offer53-二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。import java.util.Stack;import java.util.Arrays;public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { int []arr=sequence.clone(); Arrays.sort(
2020-06-13 12:44:34
174
原创 剑指Offer52-从上往下打印二叉树
从上往下打印出二叉树的每个节点,同层节点从左至右打印。import java.util.ArrayList;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } }*/import java.util.Deque;import
2020-06-13 12:16:55
141
原创 剑指Offer51-二叉搜索树的第k个结点
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } }*/public class Soluti
2020-06-12 21:44:15
167
原创 剑指Offer50-不用加减乘除做加法
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。public class Solution { public int Add(int num1,int num2) { return Integer.sum(num1,num2); }}能用一行代码解决的绝不用两行!...
2020-06-12 21:13:55
104
基于SSM开发人脉(用户)管理系统+报告.zip
2019-11-30
软件测试期末考试复习资料.zip
2019-11-30
Oracle期末考试复习资料
2019-11-30
Linux期末考试复习资料
2019-11-30
JavaWeb期末整理.zip
2019-11-30
Java期末考试复习资料.zip
2019-11-30
软件体系结构与设计模式期末复习.docx
2019-11-30
C语言复习资料.zip
2019-10-13
基于人脸识别的驾驶员疲劳检测系统.zip
2019-10-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人