- 博客(35)
- 收藏
- 关注
原创 Leetcode题目整理【腾讯面试题】
文章目录[912. 排序数组](https://leetcode-cn.com/problems/sort-an-array/)题目来源:CodeTop912. 排序数组
2021-04-06 22:18:26
260
原创 一文搞懂高并发性能指标:QPS、TPS、RT、吞吐量
文章目录一、QPS,每秒查询二、TPS,每秒事务三、RT,响应时间四、并发数五、吞吐量六、实际举例七、最佳线程数、QPS、RT1、单线程QPS公式:QPS=1000ms/RT2、QPS和RT的真实关系3、最佳线程数量一、QPS,每秒查询QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。二、TPS,每秒事务TPS:是Tran
2021-03-24 17:47:02
423
原创 设计模式:策略模式/模板方法模式/观察者模式/责任链模式
文章目录11. 策略模式(Strategy)目的类图与状态模式的比较实现12. 模板方法模式(Template Method)目的类图实现11. 策略模式(Strategy)目的定义一系列算法,封装每个算法,并使它们可以互换。策略模式可以让算法独立于使用它的客户端。类图Strategy 接口定义了一个算法族,它们都实现了 behavior() 方法。Context 是使用到该算法族的类,其中的 doSomething() 方法会调用 behavior(),setStrategy(Strat
2021-03-23 21:04:32
342
原创 设计模式 - 门面模式/适配器模式/装饰器模式
文章目录8. 门面/外观模式(Facade)目的类图实现设计原则应用场景优点8. 门面/外观模式(Facade)目的提供了一个统一的接口,用来访问子系统中的一群接口,从而让子系统更容易使用。类图 实现观看电影需要操作很多电器,使用门面模式实现一键看电影功能。public class SubSystem { public void turnOnTV() { System.out.println("turnOnTV()"); } public void
2021-03-07 16:44:02
601
3
原创 设计模式 - 建造者模式/原型模式/享元模式
文章目录建造者模式目的类图实现应用场景优点建造者模式目的封装一个对象的构造过程,并允许按步骤构造。引用:创建者模式又叫建造者模式,是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。类图 实现产品类public class Bike { private IFrame frame; private ISeat se
2021-02-24 18:52:02
177
1
原创 设计模式 - 简单工厂/工厂方法/抽象工厂模式
文章目录1.简单工厂模式(Simple Factory)目的类图实现2. 工厂方法模式(Factory Method)目的类图实现应用场景主要优点3. 抽象工厂(Abstract Factory)目的类图实现应用场景主要优点另一个例子1.简单工厂模式(Simple Factory)其他博主:本质上不是设计模式,而是一种编码方式目的在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。类图简单工厂把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪个具体
2021-02-22 22:49:31
81
原创 设计模式 - 单例模式
文章目录单例模式(Singleton)目的设计思想具体实现方法Ⅰ 懒汉式-线程不安全Ⅱ 饿汉式-线程安全Ⅲ 懒汉式-线程安全Ⅳ 双重校验锁-线程安全Ⅴ 静态内部类实现Ⅵ 枚举实现ExamplesJDK单例模式(Singleton)目的确保一个类只有一个实例,并提供该实例的全局访问点。场景:重量级的对象,不需要多个实例,如线程池,数据库连接池等。设计思想使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一
2021-02-22 10:37:31
74
原创 后端面经整理:数据库、操作系统、计算机网络等
文章目录数据库索引的底层实现:聚簇索引、非聚簇索引(辅助索引):关系模型的三类完整性约束:一致性哈希:Redis:ACID 四大特性:并发一致性问题:隔离级别:视图:InnoDB与MyISAM比较:InnoDB 4大特性:范式(解决增删改异常)数据库优化:Union 和 Union all 的区别:MySQL索引:存储过程:联结JOIN:操作系统面试题进程与线程的区别:多进程与多线程:协程:进程、线程、协程堆栈区别:进程调度:进程同步:死锁,举个例子,如何预防:虚拟地址和物理地址:页面置换算法:(缺页率最低
2021-01-14 15:12:38
1251
原创 Java面试题集锦(22):MySQL什么时候建立索引
文章目录索引简介索引是什么?优势和劣势优势劣势索引分类什么时候需要创建索引什么时候不要创建索引查询优化导致索引失效的几种情况单表使用索引建议关联查询优化建议子查询优化建议排序分组优化建议索引简介索引是什么?MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。可以得到索引的本质:索引是数据结构。简单理解就是:排好序的快速查找数据结构。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级
2020-12-29 23:04:08
86
原创 Leetcode题目整理【四、数和二叉树-中等题-1】
文章目录1. 验证二叉搜索树2. 二叉树的锯齿形层序遍历3. 不同的二叉搜索树4. 不同的二叉搜索树II5. 从前序与中序遍历序列构造二叉树6. 从中序与后序遍历序列构造二叉树7. 路径总和 II1. 验证二叉搜索树方法一:递归(1)设置一个区间范围,val的值需要在此范围内,自底而上进行递归class Solution { public boolean helper(TreeNode node, Integer lower, Integer upper) { if (no
2020-12-29 18:34:41
89
原创 git相关命令整理
文章目录修改提交查看提交历史撤销分支合并与衍合常见面试题1. git merge和git rebase的区别2. 提交时发生冲突,冲突产生的原因,解决方法?3. git stash命令的使用场景?4. git fetch和git pull命令的区别?修改提交1.查看状态(哪些提交哪些没提交)git status2.查看变更内容git diff3.添加修改的文件git add <文件名>4.文件改名git mv <old><new>5.删除文件
2020-12-28 16:34:16
89
原创 Java面试题集锦(21):成员变量与局部变量
文章目录直接上代码局部变量和类变量的区别局部变量和类/实例变量重名直接上代码以下代码的执行结果?class Exam { static int s;//成员变量,类变量 int i;//成员变量,实例变量 int j;//成员变量,实例变量 { int i=1;//非静态代码块中的局部变量i i++;j++;s++; } public void test(int j){//形参,局部变量j j++;i++;
2020-12-28 15:33:25
161
3
原创 Java面试题集锦(19):写一个Singleton实例
文章目录什么是Singleton?几种常见形式插个眼:以后有机会写一篇专门讲设计模式的博客。什么是Singleton?Singleton:在Java中指单例设计模式,它是软甲开发中最常用的设计模式之一。(单:唯一,例:实例)单例设计模式,即某个类在整个系统中只能有一个实例对象可被获取和使用的代码模式。例如:代表JVM运行环境的Runtime类。要点:某个类只能由一个实例:构造器私有化必须自行创建这个实例:含有一个该类的静态变量来保存这个唯一实例必须自行向整个系统提供这个实例:对外提供或许
2020-12-27 01:10:17
172
原创 Java面试题集锦(17):垃圾回收算法和垃圾回收器
文章目录前言1. GC垃圾回收算法和垃圾回收器的关系?2. 怎么查看服务器默认的垃圾回收器是哪个?3. Java的GC回收的类型主要有?(1)GC约定参数说明(2)Server/Client模式是什么意思?4. Java的GC回收器详情?(1)Serial Copying(2)ParNew(3)Parallel Scavenge(4)Parallel Compacting(Parallel Old)(5)CMS(6)Serial MSC(Serial Old)(7)G1生产上如何配置/选择垃圾回收器的?谈谈
2020-12-26 20:31:13
215
原创 Java面试题集锦(16):讲一下对OOM的认识
文章目录前言前言OOM抛出的error有(包括但不限于):(下列异常都是java.lang. 开头,比如java.lang.StackOverFlowError)栈溢出:StackOverFlowError堆溢出:OutOfMemoryError- OutOfMemoryError:java heap space- OutOfMemoryError:GC overhead limit exceeded- OutOfMemoryError:Direct buffer memory- Out
2020-12-25 19:53:09
216
原创 Leetcode题目整理【三、动态规划-中等题-2】
文章目录1. 超级丑数2. 为运算表达式设计优先级1. 超级丑数参考上题(丑数,见《中等题-1》的博客)的三指针方式,本题依然可以采用这个方法。区别是本题的指针数量根据primes数组的长度变化,所以定义一个指针数组即可。空间复杂度为O(nk),n和k分别是n的大小和primes的长度。class Solution { public int nthSuperUglyNumber(int n, int[] primes) { int[] dp=new int[n];
2020-12-25 12:56:01
159
原创 Java面试题集锦(15):Java的四种引用
Java的四种引用整体结构强引用软引用弱引用虚引用引用队列整体结构强引用和运用队列都继承于Object,软弱虚继承于强引用。强引用当内存不足,JVM开始垃圾回收,对于强引用的对象,就算是出现了OOM也不会对该对象进行回收。在Java中最常见的就是强引用,把一个对象赋值给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用变量引用时,它处于可达状态,它是不可能被垃圾回收机制回收的,即使该对象以后永远都不会被用到JVM也不会回收。因此强引用是造成Java内存泄漏的主要原因之一。对于一个普通
2020-12-24 22:40:33
214
1
原创 Java面试题集锦(14):平时工作用过的JVM常用基本配置参数?
文章目录基础知识:基础知识:JDK1.8之后将最初的永久代取消了,由元空间取代。元空间的本质和永久代类似,元空间(Java8)与永久代(Java7)之间最大的区别在于:永久代使用的是JVM堆内存,而Java8之后的元空间并不在虚拟机中而是使用本季的物理内存。因此,默认情况下,元空间的大小仅受本地内存限制。类的元数据放入native memory,字符串池和类的静态变量放入java堆中,这样可以加在多少类的元数据并不再由MaxPermSize(永久区的大小)控制,而是由系统的实际可用空间来控制。(注:
2020-12-24 01:00:52
245
1
原创 Java面试题集锦(13):JVM调优和参数配置,请问如何盘点查看JVM系统默认值
文章目录JVM的参数类型1.标配参数2.x参数3.xx参数(重点)(1)Boolean类型(开启/关闭)(2)KV设值类型(Key-Value键值对)(3)jinfo举例,如何查看当前运行程序的配置(4)题外话4.JVM盘点家底查看初始默认值第一种方法:第二种方法:-Xms-Xmx 这两个最好一致-Xss(待整理)https://blog.csdn.net/longgeqiaojie304/article/details/93973438JVM的参数类型1.标配参数从JDK1.0到Java1
2020-12-22 20:54:19
150
原创 Leetcode题目整理【三、动态规划-中等题-1】
文章目录1. 跳跃游戏2. 不同路径3. 不同路径 II4. 最小路径和5. 解码方法6. 三角形最小路径和7. 乘积最大子数组8. 打家劫舍 II9. 打家劫舍 III10. 丑数 II1. 跳跃游戏这个题,我当时用动态规划做的,但是开、时间复杂度很高 n2的复杂度了。官方解答很接单,就贪心算法//动态规划class Solution { public boolean canJump(int[] nums) { int n=nums.length; if
2020-12-21 18:16:57
154
原创 Leetcode题目整理【二、回溯-中等题-1】
文章目录一网打尽回溯子数组!1. 组合总和2. 组合总和Ⅱ3. 组合总和Ⅲ4. 全排列5. 全排列 II6. 组合7. 子集8. 子集Ⅱ9. 累加数一网打尽回溯子数组!面试字节和快手都被问了回溯数组的问题,这里整理一下。1. 组合总和方法一:回溯+深度优先搜索分“使用当前数”和“不使用当前数,直接跳过”class Solution { public List<List<Integer>> combinationSum(int[] candidates, int
2020-12-20 22:43:40
118
原创 Java面试题集锦(12):JVM垃圾回收确定垃圾+是否知道什么是GC Roots?
什么是垃圾?简单来说就是内存中已经不再被使用到的空间。如何判断是否成为垃圾?1. 引用计数法Java中,引用和对象是有关联的,如果要操作对象必须是通过引用进行。因此,最简单的办法是通过引用计数来判断一个对象是否可以回收。给对象中添加一个引用计数器,每当有一个地方引用它,计数器的值就加1。每当有一个引用失效,计数器值减1。任何时刻计数器值为0的对象就是不可能再被使用的,那么这个对象就是可回收对象。缺点:很难解决对象之间的相互循环引用问题。public class ReferenceCounti
2020-12-20 12:13:22
76
2
原创 Java面试题集锦(10):死锁编码及定位分析
死锁是什么?死锁是????️两个或两个以上的进程在执行过程中,因争抢资源而造成的一种互相等待现象 ,在无外力干涉时,永远无法推进下去。如果系统资源充足,进程的资源请求都能得到满足,死锁出现的可能性很低,否则就会因争夺有限的资源而陷入死锁。产生死锁的主要原因:系统资源不足,进程运行推进的顺序不合适,资源分配不当。死锁Democlass HoldThread implements Runnable{ private String lockA; private String lockB;
2020-12-20 11:15:59
91
4
原创 Java面试题集锦(9):线程池的使用
1. 为什么用线程池,优势是什么?线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程就会排队等候,等其它线程执行完毕,再从队列中取出任务来执行。主要特点:线程复用,控制最大并发数,管理线程主要优点:降低资源消耗,通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度,当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性,线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,
2020-12-19 21:36:20
176
1
原创 Java面试题集锦(8):Callable接口和Runnable接口
1.Callable接口和Runnable接口的不同点class myThread1 implements Runnable{ @Override public void run() { }}class myThread2 implements Callable<Integer>{ @Override public Integer call() throws Exception { return null;
2020-12-19 11:38:45
218
1
原创 Java面试题集锦(7.1):阻塞队列
阻塞队列有没有好处?不得不阻塞时应该如何管理?Thread1是生产线程,Thread2是消费线程。当阻塞队列为空时,从队列中获取元素的操作将会被阻塞;当阻塞队列是满时,从队列里添加元素的操作将会被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其它线程往空队列插入新元素。试图往已满的阻塞队列中添加新元素的线程也会被阻塞,值到其他的线程从队列中移除一个或多个元素,或者完全清空队列后使队列重新变得空闲起来并后续新增。BlockingQueue的好处?在多线程领域,所谓阻塞,在某些情况下会
2020-12-17 20:46:26
220
2
原创 Leetcode题目整理【一、链表-中等题-1】
1 两数相加class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode dummyHead = new ListNode(0); ListNode p = l1, q = l2, curr = dummyHead; int carry = 0; while (p != null || q != null) {
2020-12-16 13:24:25
134
原创 Java面试题集锦(6):CountDownLatch/CyclicBarrier/Semaphore的使用
CountDownLatchlatch:门闩、插销、碰锁、弹簧锁;如果没有CountDownLatchclass Scratch { public static void main(String[] args) { for(int i=0;i<6;i++){ new Thread(()->{ System.out.println(Thread.currentThread().getName()+"\t 完成")
2020-12-16 10:42:59
271
1
原创 Java面试题集锦(5):公平锁/非公平锁/可重入锁/递归锁/自旋锁的理解,并手写自旋锁。
一、公平锁、非公平锁公平锁:是指多个线程按照申请锁的顺序来获取锁,类似排队打饭,先来后到。*官方:*在并发环境中,每个线程在获取锁时会先查看此锁维护的等待队列,如果为空,或者当前线程是等待队列中的第一个,就占有锁,否则就会加入到等待队列中,以后会按照FIFO的规则从队列中,直到轮到自己。非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁,在高并发的情况下,有可能会造成优先级反转或者饥饿现象。*官方:*上来就直接尝试占有锁,如果尝试失败,就再采用类似公
2020-12-15 12:21:17
155
原创 Java面试题集锦(4):线程不安全之ArrayList、Set、Map
我们知道ArrayList是线程不安全的,请编码写一个不安全的案例并给出解决方案?一、ArrayList案例1. 故障现象class Scratch { public static void main(String[] args) { //List<String> list = Arrays.asList("a","b","c"); //list.forEach(System.out::println); List<Strin
2020-12-14 23:30:28
99
原创 Java面试题集锦(3):ABA问题
原子类AtomicInteger的ABA问题谈谈?原子更新引用知道吗?Atomiinteger类使用cas保证原子性问题,但同时也引发了新的问题;ABA问题。ABA:可以理解为“狸猫换太子”。其中的A、B分别代指旧的预期值和更新值。(V,内存值,A旧的预期值,B,要求个更新值);CAS算法实现的一个重要前提需要提取出内存中某时刻的数据并在当下时刻比较并替换,那么在这个时间差里会导致数据的变化比如说一个线程one从内存位置V中取出A,这时候另一个线程two也从内存中取出A,并且线程two进行了一些操
2020-12-13 16:11:18
220
原创 Java面试题集锦(2):CAS是什么?
CAS是什么?一、CAS:比较并交换(Compare-And-Swap)。class CASDemo { public static void main(String[] args){ AtomicInteger atomicInteger = new AtomicInteger(5); System.out.println(atomicInteger.compareAndSet(5,2019)+"\t current data: "+atomicInteger.
2020-12-13 15:11:15
112
原创 Java面试题集锦(1):volatile关键字
Java面试题集锦(1):volatile关键字一、volatile是java虚拟机提供的轻量级同步机制保证可见性不保证原子性禁止指令重排序1.JMM(java内存模型)JMM是java内存模型(java memory model),本身是一种抽象的概念,并不真实存在。它描述的是一组规则或规范,通过这组规范定义了程序中的各个变量(包括实例字段、静态字段和构成数组对象的元素)的访问方式)。JMM关于同步的规定:线程解锁前,必须把共享变量的值刷新到主内存;线程加锁前,必须读取主内存的最新
2020-12-12 01:09:42
227
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人