自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 LeetCode 剑指 Offer 刷题代码 (5)

面试题61. 扑克牌中的顺子从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。 public boolean isStraight(int[] nums) { Arrays.sort(nums); int zero = 0,...

2020-03-24 21:36:05 131

原创 LeetCode 剑指 Offer 刷题代码 (4)

面试题58 - II. 左旋转字符串 public String reverseLeftWords(String s, int n) { return s.substring(n)+s.substring(0,n); }面试题58 - I. 翻转单词顺序 public String reverseWords(String s) { s =...

2020-03-19 23:03:42 268

原创 LeetCode 剑指 Offer 刷题代码 (3)

面试题32 - III. 从上到下打印二叉树 III请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。 public List<List<Integer>> levelOrder(TreeNode root) { if (root == null)...

2020-03-15 15:01:48 152

原创 LeetCode 剑指 Offer 刷题代码 (2)

面试题15. 二进制中1的个数请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。 public int hammingWeight(int n) { int count = 0; while(n!=0){ count += ...

2020-03-07 01:02:50 126

原创 LeetCode 剑指 Offer 刷题代码 (1)

面试题13. 机器人的运动范围地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8...

2020-02-22 21:11:08 103

原创 JAVA 基础复习(2)缓存池 String 继承 抽象类与接口

缓存池new Integer(123) 与 Integer.valueOf(123) 的区别在于:new Integer(123) 每次都会新建一个对象;Integer.valueOf(123) 会使用缓存池中的对象,多次调用会取得同一个对象的引用。Integer x = new Integer(123);Integer y = new Integer(123);System.out...

2020-02-19 21:09:02 149

原创 JAVA 基础复习(1) 异常处理、反射、内部类、泛型

JAVA 异常分类及处理如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法。在这种情况下会抛出一个封装了错误信息的对象。此时,这个方法会立刻退出同时不返回任何值。另外,调用这个方法的其他代码也无法继续执行,异常处理机制会将代码执行交给异常处理器。异常分类Throwable 是 Java 语言中所有错误或异常的超类。下一层分为 Error 和 ExceptionErr...

2020-02-18 23:12:20 115

原创 volatile 关键字的作用(变量可见性、禁止重排序)

Java 语言提供了一种稍弱的同步机制,即 volatile 变量,用来确保将变量的更新操作通知到其他线程。volatile 变量具备两种特性,volatile 变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取 volatile 类型的变量时总会返回最新写入的值。变量可见性其一是保证该变量对所有线程可见,这里的可见性指的是当一个线程修改了变量的值,那么新的值对于其他线程是...

2020-02-18 21:06:29 281

原创 JAVA 多线程并发(2)

JAVA 锁乐观锁乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写的操作。java 中的乐观锁基本都是通过 CAS 操作实现的,CAS 是一种更新的原子操...

2020-02-18 20:46:20 142

原创 JAVA 多线程并发(1)

JAVA 线程实现/创建方式继承 Thread 类Thread 类本质上是实现了 Runnable 接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过 Thread 类的 start()实例方法。start()方法是一个 native 方法,它将启动一个新线程,并执行 run()方法。public class MyThread extends Thread { publi...

2020-02-18 15:02:23 89

原创 深入理解 HashMap (源码阅读)

特殊常量//默认初始化容量为16static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;//最大容量为2^30static final int MAXIMUM_CAPACITY = 1 << 30;//负载因子为0.75,负载因子指的是,键值对的数量/数组的长度,如果超出负载因子,则需要对数组进行扩容static f...

2020-02-18 12:04:24 111

原创 JAVA NIO

NIO 主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selector。传统 IO 基于字节流和字符流进行操作,而 NIO 基于 Channel 和 Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择区)用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个线程可以监听多个数据通道。NIO 和传...

2020-02-17 22:09:43 92

原创 JVM 学习笔记(3) 垃圾回收与垃圾回收算法

垃圾回收与垃圾回收算法如何确定垃圾引用计数法在 Java 中,引用和对象是有关联的。如果要操作对象则必须用引用进行。因此,很显然一个简单的办法是通过引用计数来判断一个对象是否可以回收。简单说,即一个对象如果没有任何与之关联的引用, 即他们的引用计数都为 0, 则说明对象不太可能再被用到,那么这个对象就是可回收对象。引用计数法存在的问题但是Java并不采用引用计数法,原因如下:jdk从1...

2020-02-16 23:49:07 193

原创 JVM 学习笔记(2)方法区 栈 堆 (参数调优)

Method Area 方法区供各线程共享的运行时内存区域。**它存储了每一个类的结构信息**,例如运行时常量池(Runtime Constant Pool)、字段和方法数据、构造函数和普通方法的字节码内容。上面讲的是规范,在不同虚拟机里头实现是不一样的,最典型的就是永久代(PermGen space)和元空间(Metaspace)。Stack栈栈也叫栈内存,主管Java程序的运行,是在线...

2020-02-16 20:06:30 147

原创 JVM 学习笔记(1) 类加载器 Native

类装载器ClassLoader负责加载class文件,class文件在文件开头有特定的文件标示,将class文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时数据结构并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。类加载机制JVM类加载分为5个过程:加载,验证,准备,解析,初始化,使用,卸载,如下图所示:...

2020-02-16 10:30:41 216

原创 CopyOnWriteArrayList & CopyOnWriteArraySet & ConcurrentHashMap & 写时复制

写时复制CopyOnWrite容器即写时复制的容器。往一个容器添加元素的时候,不直接往当前容器Object[]添加,而是先将当前容器Object[]进行Copy,复制出一个新的容器Object[] newElements,然后新的容器Object[] newElements里添加元素,添加完元素之后,再将原容器的引用指向新的容器 setArray(newElements);。这样做的好处是可以对...

2020-02-15 17:01:44 335

原创 LambdaExpress(小复习)

内容1 拷贝小括号, 写死右箭头, 落地大括号2 @FunctionalInterface3 default4 static@FunctionalInterfaceinterface Foo{ public int add(int x, int y); default int mul(int x, int y) { ...

2020-02-15 14:43:11 116

原创 如何编写企业级的多线程代码

在高内聚低耦合的前提下,线程 操作 资源类class Ticket //资源类{ private int number = 30; Lock lock = new ReentrantLock(); public void sale() { lock.lock(); try { ...

2020-02-15 12:14:27 298

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除