![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 69
Gerry_Liang
我很懒,还没有简介
展开
-
Java基础361问第15问——线程安全的方法
提到线程安全想必大家并不陌生,但是为什么真正项目中遇到多线程问题的时候却很棘手?很大一部分原因是我们只学理论走马观花看了几篇博客背了几个面试点就以为自己掌握了,Talk is Cheap, Show me the code!因此这篇文章我会结合具体的代码介绍几种线程安全的方法和注意事项,希望能给你一个清晰地印象。我们以火车售票场景为例,假如有两个窗口同时卖票,代码如下System . out . println(name + "售票成功!还剩 " +(-- tickets) + " 张票~");原创 2023-03-20 22:47:59 · 501 阅读 · 1 评论 -
Java基础361问14问——为什么非静态内部类会默认持有外部类的引用?
在内存泄露问题排查中最常遇到就是 【非静态内部类默认持有外部类的引用】原创 2023-02-19 15:14:19 · 577 阅读 · 0 评论 -
聊一聊HashSet
坦白讲, 开发了多年Android但是我基本上没有用到过HashSet,不如看下其源码希望以后有需求打过来的时候可以考虑用这种数据结构实现。文章目录1 HashSet本质上是什么呢? 集合2 HashSet 集合的特点是什么? 去重 && 无序3 HashSet 如何获取某个元素的呢? Iterator4 HashSet 使用中需要注意哪些问题?4.1 引用数据类型记得重写hashCode和equals方法4.2 想保证线程安全使用这段代码1 HashSet本质上是什么呢? 集合原创 2022-05-22 21:39:45 · 319 阅读 · 0 评论 -
写段代码理解 scheduleAtFixedRate和scheduleWithFixedDelay
① 如果任务在周期内正常结束掉的话scheduleAtFixedRate和scheduleWithFixedDelay没有差别public void start() { ScheduledExecutorService pool = Executors .newScheduledThreadPool(1); System.out.println("this task startTime "); pool.scheduleAtF原创 2022-05-07 23:49:53 · 333 阅读 · 0 评论 -
Aspectjx的集成和使用
终于有时间写一篇hook的文章了。反射和Hook的相同点和不同点是什么?都是修改字节码,但是反射是调用字节码而Hook是重构字节码说起来有点抽象,举个例子:美国男篮和中国男篮举行篮球赛,每个队伍都有1,2,3,4,5号队员。中国1号队员又不认识美国1号队员,那么是怎么盯防1号队员的呢?对的,会有一个1号球衣,他只要看球衣就行了,美国人长得都一样不用仔细看脸,美国队员也是这么盯防中国队的中国队觉得美国队实力很强,比赛之前排兵布阵将12和45队员位置互换,然后组成45312阵容和美国12345阵原创 2020-05-18 16:45:47 · 2464 阅读 · 0 评论 -
使用注解代替枚举
原文链接:如何在Android中避免创建不必要的对象相关的注解为IntDef和StringDefpublic class AppConstant { public static final int AWAIT = 0; public static final int ING = 1; public static final int FINISH = 2; ...原创 2019-04-17 10:55:39 · 630 阅读 · 0 评论 -
javap命令对代码进行反汇编
java中有些代码我们无法通过源代码获取执行的逻辑,比如下面定义两个整数,我们发现Integer类中并没有这样定义的方法,但是java却可以这样定义,难免猜想中间做了什么操作但是我们又不知道public class Main { public static void main(String[] args) { Integer a=128; Integer ...原创 2019-03-11 09:32:52 · 1013 阅读 · 0 评论 -
Java基础361问9问——位运算
我们查看源代码的时候总会看一些位运算符号,由于位运算比乘除运算更加高效,所以了解位运算可以帮助我更好地解决一些算法的问题。按位与 & (类似逻辑运算符 &&)按位或 | (类似逻辑运算符||)按位异或 ^ (可以理解为两个数相加,1+1=0,0+1=1,0+0=0)取反 ~ (0变成1,1变成0)左移 << (理解为...原创 2019-03-13 23:25:10 · 176 阅读 · 0 评论 -
Java基础361问第6问——重载和重写的区别
首先说二者的相同点:方法名相同重写时,方法具有完全相同的参数重载时,方法具有不同的参数(个数,类型或者顺序)下面这个方法为原方法public int getAge(int a){ return 1; }1 不同的参数个数public int getAge(int a,int b){ return 1; }2 不同的参数类型p...原创 2019-02-19 21:37:08 · 218 阅读 · 0 评论 -
Java基础361问8问——阻塞队列的原理
我们知道线程池是靠阻塞队列实现的,那么这个阻塞队列是具体如何实现阻塞的呢?说到阻塞我们能想到线程的sleep和wait方法,seep是让线程睡眠若干秒再去执行,而wait是让线程休眠如果不通知线程恢复,那么线程将一直休眠下去不进行任何操作。所以我们想到的一个办法是通过wait和notify方法休眠和恢复休眠线程实现阻塞和恢复final Object obj = new Object(); ...原创 2019-02-28 22:04:34 · 201 阅读 · 0 评论 -
Java基础361问10问——String.intern方法
public static void main(String[] args) { String s1 = new StringBuilder("ja").append("va").toString(); show(s1.intern(), s1); String s2 = new StringBuilder("py").append("thon...原创 2019-04-22 08:20:23 · 192 阅读 · 0 评论 -
Java基础361问11问——Queue
很早之前我写过一篇博客用来分析LinkedListCollection源码之路(2)——LinkedList那个时候提到了LinkedList实现了Deque接口,Deque其实就是在Queue的基础上增加了一些方法变成了可以操作两端的队列,那就让我们在这篇博客里面聊聊这个Queue吧public interface Queue<E> extends Collection<...原创 2019-06-07 16:33:36 · 181 阅读 · 0 评论 -
Java基础361问10问——i++和++i哪个效率高
++i效率更高,因为i++需要产生一个临时变量浪费一定的时间,而++i不会java代码如下:public class Main { public static void main(String[] args) { Integer a = 0; int c = 0; for (int i = 0; i <100; i++) { ...原创 2019-05-29 22:28:23 · 458 阅读 · 4 评论 -
Java基础361问12问——Math.floor Math.round Math.ceil方法区别
floor翻译成地板,ceil翻译成天花板,我们可以理解为地板就是朝下取整,天花板是向上取整数Math.floor结果是double类型,结果向下取整 System.out.println(Math.floor(11.50)); System.out.println(Math.floor(-11.50)); System.out.println(M...原创 2019-06-24 14:12:11 · 339 阅读 · 0 评论 -
[转载]不可不说的Java“锁”事
美团技术大牛分享,仔细看下来确实受益匪浅不可不说的Java“锁”事第一遍看是不知道在说啥,第二遍看知道了是在说明java中的锁的种类但是记不清,三遍四遍就可以大概记住常见的锁的概念。...转载 2019-06-24 21:39:55 · 284 阅读 · 0 评论 -
Java基础361问13问——反射可以修改常量吗?
利用反射修改final数据域这篇博客很好建议看看,虽然可以修改final修饰的常量但是无法修改static final修饰的常量,否则爆java.lang.IllegalAccessException: Can not set static final java.lang.String 异常public class Main { public static void main(Str...原创 2019-06-27 22:48:56 · 770 阅读 · 1 评论 -
Mac OS 卸载JDK 12
cherrydeMacBook-Pro:~ xmly$ cd /Library/Java/JavaVirtualMachines/cherrydeMacBook-Pro:JavaVirtualMachines xmly$ lsjdk-12.0.2.jdk jdk1.8.0_221.jdkcherrydeMacBook-Pro:JavaVirtualMachines xmly$ sudo r...原创 2019-08-01 17:40:28 · 1473 阅读 · 0 评论 -
Java基础361问第7问——链表逆序
首先构造一个Node节点结构public class Node { public Node next; public int age;}接着我们初始化这个链表 Node head=null,p=null;//head表示头结点,一般不要轻易修改 for (int i = 0; i < 10; i++) { No...原创 2019-02-27 23:12:34 · 208 阅读 · 0 评论 -
Java基础361问第4问——List如何遍历删除指定元素
这道题是面百度时的一个问题,也是一道很经典的题目给定一个整数集合{1,2,2,3,4},删除其中能够被2整除的元素(即最后集合变为{1,3})看到这个问题,我开始觉得很简单for (int i = 0; i&amp;lt;list.size(); i++) { if(list.get(i)%2==0){ list.remove(i); ...原创 2019-01-29 18:23:40 · 8696 阅读 · 6 评论 -
Java基础361问第2问——Java中的异常处理
Throwable类是一切异常和错误处理类的根类,下分为两大子类Exception和Error下面这段代码可以编译通过吗?try { throw new IllegalArgumentException(); } catch (Object e) { }答案是不可以,Object 不是符合要求的类型,只有T...原创 2019-01-16 22:49:02 · 175 阅读 · 0 评论 -
Integer自动装箱和Integer.valueOf()
Java自动装箱可能大家都不陌生,基本数据类型由JVM自动转成对象类型。在JDK1.5之前,我们是这么使用的Integer iObject = Integer.valueOf(3);Int iPrimitive = iObject.intValue()JDK1.5开始,我们就可以这样使用Integer iObject = 3;int iPrimitive = iObject;使用起来确实很简单,下面原创 2017-10-28 09:51:28 · 814 阅读 · 0 评论 -
String类中常用方法源码解析
初学String的时候完全不知道String里面有一大堆处理字符串的方法,硬是傻乎乎地自己去写,但是自从知道这些方法并且用了这么长时间一直咩有研究人家的具体实现,实在是丢人!学习人家的思路,帮助自己成长,本着这个目的开始了我的本篇博客M1 length( )和 isEmpty( )public int length() { return count;}public boolean i原创 2017-10-11 21:54:28 · 328 阅读 · 0 评论 -
sleep和wait
多线程问题中,经常问的一点就是sleep方法和wait方法的区别,如果没有看过源码,估计很多人死记硬背理解不了,还是老规矩,看源码理解。1 注释的源码Sleep Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds pl原创 2017-10-22 15:47:59 · 372 阅读 · 0 评论 -
java生成csv,txt文件
项目遇到个需求(用java代码生成csv和txt文件): 生成10000张读书卡的卡号和秘钥,然后存储到数据库//用于生成秘钥的方法public static String getOrderIdByUUId() { int machineId = 1;//最大支持1-9个集群机器部署 int hashCodeV = UUID.randomUUID().toSt原创 2017-11-16 13:28:22 · 2833 阅读 · 0 评论 -
Java集合之面试篇
鉴于Android面试中对java基础很是看中而集合又是基础中的核心部分,所以有必要好好学习下集合的相关知识,这篇博客的原则如下 不分析任何源码方法,只看源码注释Iterablepublic interface Iterable<T>{}Implementing this interface allows an object to be the target of the "for-each原创 2017-11-24 14:40:53 · 325 阅读 · 0 评论 -
Java读写文件
对文件的读写有两种方式:字符流和字节流字节流读文件 public static String byteReading(File file){ StringBuilder sb = new StringBuilder(); try { FileInputStream in = new FileInputStream(file);原创 2017-11-25 15:41:39 · 242 阅读 · 0 评论 -
做了四年开发,对反射究竟了解多少呢?
举个栗子通俗说下反射的用途类是对万物的抽象,黑人白人黄种人,但是都有相似的属性(头发,四肢,耳朵,眼睛等),所以可以抽象成一个类(Person类),奔驰宝马大众都有发动机,车架,车轮属性可以组成一个类(Car类),猫狗猪可以组成一个类(Animal类)这三个类有没有相似的属性呢?都有属性和行为,对,都有属性和行为的类可以抽象成一个类上类(Class类)所以类是对万物的抽象,而Class类是对类的抽象原创 2017-11-24 21:46:52 · 305 阅读 · 0 评论 -
Java String,long,Date时间格式相互转换
/** * Date转String(格式自定义) * @param pattern yyyy-MM-dd HH:mm:ss yyyy-MM-dd等样式 * @return */ public static String date2String(Date date,String pattern) { SimpleDateFormat f原创 2018-02-01 08:55:09 · 2664 阅读 · 0 评论 -
json字符串与对象之间转换
Gson解析原创 2018-01-18 18:33:42 · 1048 阅读 · 1 评论 -
Java基础361问第3问——switch和if的区别
java version “11.0.2” 2019-01-15 LTSJava™ SE Runtime Environment 18.9 (build 11.0.2+9-LTS)Java HotSpot™ 64-Bit Server VM 18.9 (build 11.0.2+9-LTS, mixed mode)本次测试的Java版本是11.0.2switch不可以进行逻辑判断,i...原创 2019-01-24 00:00:22 · 265 阅读 · 0 评论 -
Java基础361问第5问——equals和==的区别
判断两个数或者两个对象是否相等,我们一般使用equals或者==比较,但是为什么String字符串的比较一般使用equals而基本数据类型的比较使用= =呢?先说结论 1 equals是方法,==是逻辑运算符 2 基本数据类型没有equals方法,只能用==判断,比较的是两个数的值 3 引用数据类型可以用equalse也可以用==判断,但是==判断效率更高,因为只是比较引用地址是否一致,e...原创 2019-01-31 15:27:15 · 218 阅读 · 0 评论 -
Java基础361问第1问——try catch finally 执行顺序
出去面试才知道基础的重要性,为了巩固基础特意开始着手写此系列的博客,打算java基础360度(多一度热爱)提问,让大家学习java的时候能够学习的更加深刻,基础更加牢固一点JDK 版本是 11.0.1第1题,下图代码输出的结果是? try { return 0; } catch (Exception e) { return ...原创 2019-01-16 21:56:59 · 211 阅读 · 0 评论