Java
文章平均质量分 92
Java
GaleZhang
这个作者很懒,什么都没留下…
展开
-
Arthas使用指北——命令、原理及案例
Arthas是Alibaba开源的Java在线诊断工具,可以很方便的在生产环境运行,在不重启服务的情况下,实现对服务的深度监控与诊断。包括但不限于:查看对象的值,函数的入参和返回值,全局的监控服务运行状态,诊断死锁、高资源占用,查看JVM的状态,甚至可以动态改变服务的源码,增加日志的打印等等,实乃解决线上问题的利器。同时作为一款debug工具,其简洁的交互方式,清晰的图表,tab自动补全等功能,也极大的方便了我们的使用。原创 2022-09-03 13:20:10 · 1007 阅读 · 0 评论 -
个人整理的面试题汇总(一)——Java基础知识
Java和C的区别Java与C++都是面向对象语言,都使用了面向对象思想(例如封装、继承、多态等)由于面向对象有许多非常好的特性(继承、组合等),因此二者都有很好的可重用性需要注意的是,二者并非完全一样,下面主要介绍它们的不同点:1)Java为解释性语言,其运行过程为:程序源代码经过Java编译器编译成字节码,然后由JVM解释执行。而C/C++为编译型语言,源代码经过编译和链接后生成可执行的二进制代码。因此,Java的执行速度比C/C++慢,但是Java能够跨平台执行,而C/C++不能。2)Java原创 2020-10-13 17:07:38 · 203 阅读 · 0 评论 -
面试题:如何设计一个阻塞队列?
前言面试问到了这个问题,回答的很糟糕,这里记录一下。当时回答的是在读取时用while循环判断是否为空,是的话就sleep一段时间,再重新判断,不为空则读取并返回,在插入时用while循环判断是否为满,为满则sleep一段时间,再重新判断,不为满则插入。完全没有考虑线程安全的问题,同样用循环等待的方式也太过暴力了,实在是一个糟糕的设计。分析我们知道阻塞队列相比于普通队列,区别在于当队列为空时获取被阻塞,当队列为满时插入被阻塞。当被阻塞时,我们的获取或插入线程进入阻塞状态,当队列中有了元素或者有剩余空原创 2020-09-14 13:26:11 · 1467 阅读 · 0 评论 -
Java移位运算符的优先级带来的一个小坑,二分查找中用>>1代替/2居然死循环了
先说结论优先级运算符结合性1()、[]、{}从左向右2!、+、-、~、++、–从右向左3*、/、%从左向右4+、-从左向右5<<、>>、>>>从左向右6<、<=、>、>=、instanceof从左向右7==、!=从左向右8&从左向右9^从左向右10|从左向右11&&从左向右12||从原创 2020-09-07 13:41:55 · 905 阅读 · 0 评论 -
记录一道有意思的题目:ArrayList的add(int index, E e)时间复杂度小于O(n)吗?
LeetCode 5497查找大小为m的最新分组给你一个数组 arr ,该数组表示一个从 1 到 n 的数字排列。有一个长度为 n 的二进制字符串,该字符串上的所有位最初都设置为 0 。在从 1 到 n 的每个步骤 i 中(假设二进制字符串和 arr 都是从 1 开始索引的情况下),二进制字符串上位于位置 arr[i] 的位将会设为 1 。给你一个整数 m ,请你找出二进制字符串上存在长度为 m 的一组 1 的最后步骤。一组 1 是一个连续的、由 1 组成的子串,且左右两边不再有可以延伸的 1原创 2020-08-23 15:12:27 · 413 阅读 · 0 评论 -
发现了TreeMap的一个坑,自定义Comparator导致put不成功
当自定义Comparator对TreeMap的key排序时,如果两个key的comparator相同,即compare方法的返回值为0的时候,会出现一个坑,如下:TreeMap<Integer,Integer> map = new TreeMap<Integer,Integer>((a, b) -> wgt[a] - wgt[b]);for(int i = 0; i < wgt.length; i++) { map.put(i,weight[i]); //当原创 2020-05-27 09:38:11 · 874 阅读 · 0 评论 -
Arrays.sort方法重写Comparator对int[]排序
LeetCode第1342题给你一个整数数组 arr。你可以从中选出一个整数集合,并删除这些整数在数组中的每次出现。返回 至少 能删除数组中的一半整数的整数集合的最小大小。示例 1:输入:arr = [3,3,3,3,5,5,5,2,2,7]输出:2解释:选择 {3,7} 使得结果数组为 [5,5,5,2,2]、长度为 5(原数组长度的一半)。大小为 2 的可行集合有 {3,5...原创 2020-02-06 11:18:45 · 7825 阅读 · 2 评论 -
Integer.parseInt解析二进制字符串的一个小坑
今天做题用到了Integer.parseInt方法来将二进制字符串解析为Integer值,但出现了java.lang.NumberFormatException异常,我已经将字符串的长度限制为了32位,但仍出了这个异常,因此百思不得其解。查阅资料发现这个方法解析二进制时,不能用符号位来表示正负,如果是负数,要显式的用“-”表示出来,如 int a = Integer.parseInt("-00...原创 2020-01-30 11:56:35 · 1738 阅读 · 1 评论 -
Map按value排序的几种方法
以LeetCode的题目为例:有 n 个人,每个人都有一个 0 到 n-1 的唯一 id 。给你数组 watchedVideoswatchedVideoswatchedVideos 和 friendsfriendsfriends ,其中 watchedVideos[i]watchedVideos[i]watchedVideos[i] 和 friends[i]friends[i]frien...原创 2020-01-05 14:02:59 · 7753 阅读 · 0 评论 -
桶排序
桶排序问题:给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。如果数组元素个数小于 2,则返回 0。示例 1:输入: [3,6,9,1]输出: 3解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。示例 2:输入: [10]输出: 0解释: 数组元素个数小于 2,因此返回 0。说明:你可以假设数...原创 2020-01-02 16:07:32 · 230 阅读 · 0 评论 -
Java反射的性能问题
Java反射的性能问题反射是Java一个很重要的动态特性,许多常用框架都用到了Java的反射。想要详细了解一下Java的反射相比直接调用有多少的性能损耗,效率降低的原因在哪里,以及如何对反射进行优化,自己总结了一下。1 反射有哪些方法?老生常谈了,三种方法,分别是:.class字段Foo foo = new Foo();Class c1 = foo.class;getCla...原创 2019-12-25 09:45:07 · 1076 阅读 · 0 评论 -
Java中的注解(Annotation)
概述java中的类、方法、变量、参数和包等都可以被注解。注解根据类型的不同,可以在编译时或者运行时发挥作用。我们可以进行自定义的注解,注解可以通过反射来获取内容。AnnotationAnnotation可以看做一类特殊的接口。https://www.runoob.com/w3cnote/java-annotation.html...原创 2019-12-17 21:40:04 · 179 阅读 · 0 评论 -
Java中的反射
Java中的反射概述Java的反射是一个非常重要的概念。它具体是指,在运行状态中,对于任意一个类,我们都能够知道这个类的所有的方法和属性;对于任意一个对象,我们都能够调用它的任意一个属性或方法;这是一种动态的获取信息以及动态的操作对象的机制。使用反射可以访问类的私有对象,但是这并不是反射的目的,反射的目的是能够使程序在运行时对类进行自观,在开发某些功能时非常有用。实际上,反射的效率远比直接代码...原创 2019-12-17 21:19:17 · 115 阅读 · 0 评论 -
Java HashMap整理
HashMap概述基于哈希表的Map接口的非同步实现。提供所有的映射操作,允许null值和null键。不保证映射的顺序,不保证顺序恒久不表。数据结构链表散列:数组+链表transient Entry[] table;static class Entry<K, V> implements Map.Entry<K, V> { final K key; ...原创 2019-12-16 13:20:25 · 143 阅读 · 0 评论 -
整理一下最常用的三种排序:快速排序,归并排序,堆排序
整理一下最常用的三种排序给出一个区间的集合,请合并所有重叠的区间。快速排序归并排序堆排序以LeetCode56题为例,原理就不多说了给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2...原创 2019-12-16 13:21:09 · 862 阅读 · 0 评论