
Java基础
文章平均质量分 93
临木小屋
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
多线程与并发:synchronized与面试总结
synchronized的实现原理Synchronized在JVM里的实现都是基于进入和退出Monitor对象来实现方法同步和代码块同步,虽然具体实现细节不一样,但是都可以通过成对的MonitorEnter和MonitorExit指令来实现。对与同步代码块MonitorEnter指令插入在同步代码块的开始位置,当代码执行到该指令时将会尝试获取该对象Monitor的所有权即尝试获得该对象的锁,而monitorExit指令则插入在方法结束处和异常处,JVM保证每个MonitorEnter必须有对应的Mon原创 2021-04-08 17:50:43 · 226 阅读 · 0 评论 -
多线程与并发:从JMM设计中理解volatile
JMM :Java Memory Model要理解JMM,要先从计算机底层开始如果我们计算一次a+b所需要的的时间:CPU读取内存获得a,100纳秒CPU读取内存获得b,100纳秒CPU执行一条指令 a+b ,0.6纳秒也就是说主要的时间花费在CPU读取内存上了,所以在当代CPU里面引入了高速缓存...原创 2021-04-08 15:55:17 · 206 阅读 · 0 评论 -
多线程与并发:AQS深入理解
本文主要探讨下列几个问题:AQS设计初衷资源占用的标识、重入标识设计设计模式多线程处理(CLH)一个栗子AQS设计初衷比如有这么个场景:有四个线程由于业务需求需要同时占用某资源,但该资源在同一个时刻只能被其中唯一线程所独占。那么问题来了,怎么标识资源已经被占用?若支持可重入,怎么标识冲入次数?对于争夺资源的线程怎么设计,是公平锁还是非公平锁?怎么判断上一个线程是否已经释放资源?这就是AQS的设计初衷了。AQS 是一个集同步状态管理、线程阻塞、线程释放及队列管理功能与一身的同步框架。其核原创 2021-04-05 22:07:13 · 271 阅读 · 0 评论 -
多线程与并发:Thread
本文主要探讨以下几个问题:线程的创建线程的生命周期线程安全问题常见面试题线程的创建线程的创建方式有且仅有2种继承Thread类实现Runnable接口交给Thread执行有源码证明区别:单继承,实现接口更灵活线程的生命周期Java中线程的状态分为6种:初始(NEW):新创建了一个线程对象,但还没有调用start()方法。运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如ma原创 2021-04-04 11:00:34 · 131 阅读 · 0 评论 -
多线程与并发:ThreadLocal深入理解
本文主要探讨以下几个问题:ThreadLocal是为解决什么问题而存在用锁机制实现的ThreadLocal有什么问题源码阅读剖析ThreadLocal 设计初衷多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步措施才能保证线程安全性。ThreadLocal是除了加锁这种同步方式之外的一种保证一种规避多线程访问出现线程不安全的方法,当我们在创建一个变量后,如果每个线程对其进行访问的时候访问的原创 2021-04-03 22:57:13 · 237 阅读 · 2 评论 -
Java:泛型入门与理解
Signature 是其中最重要的一项属性,作用是存储一个方法在字节码层面的特征签名,这个属性中保存的参数类型不是原生类型,而是包括了参数化类型的信息。Signature属性的出现,Java泛型擦除法所谓的擦除,只是对方法的Code属性中的字节码进行擦除,实际上元数据中还是保留了泛型信息,这也是我们能通过反射手段获取参数化类型的根本依据。:因为泛型类中泛型参数的实例化是在定义泛型类型对象(ArrayList)的时候指定的,而静态成员是不需要使用对象来调用的,所有对象都没创建,如何确定这个泛型参数是什么。原创 2021-04-02 17:59:53 · 189 阅读 · 0 评论 -
多线程与并发:线程池与阻塞队列
为什么要用线程池降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗提高响应速度。少了创建线程、销毁线程的时间提高线程的可管理性。线程是稀缺资源,使用线程池可以统一分配、调优和监控阻塞队列阻塞队列要满足下面两点:插入:队列不满时可以插入,满了阻塞插入元素的线程移除:队列不为空时可以移除,空了阻塞取走元素的线程即生产者-消费者模式参数意义 public ThreadPoolExecutor( // 核心线程数原创 2021-03-02 22:11:23 · 432 阅读 · 0 评论 -
Android:安全问题记录
MD5 加密MD5本质是一种散列函数,用以提供消息的完整性保护。特点:压缩性:任意长度的数据,算出的MD5值长度都是固定的;容易计算:从原数据计算出MD5值很容易;抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大的区别;强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(及伪造数据)是非常困难的;不可逆:MD5理论上是不可逆的(但是现在已经可以暴力破解了)。使用场景:验证密码:只要算法不变,就能和服务器上的MD5匹.原创 2020-11-18 11:37:16 · 164 阅读 · 0 评论 -
RxJava:骚操作集锦
功能防抖 @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_test); Button button = findViewById(R.id.btn); TextView textView = f.原创 2020-10-28 16:35:40 · 193 阅读 · 0 评论 -
RxJava:源码学习笔记(二)
上篇文章写得比较简单,看不出RxJava的精髓,这里咱们再加一步老规矩先上代码,比上一篇多个mapObservable .create( // 起点 new ObservableOnSubscribe<String>() { @Override pu.原创 2020-10-27 16:46:54 · 272 阅读 · 0 评论 -
RxJava :源码学习笔记(一)
先来个最简单的例子 Observable .create( // 此处称为起点,source new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableE原创 2020-10-26 22:05:24 · 136 阅读 · 0 评论 -
Java:浅克隆与深克隆解析
浅克隆Address.javapublic class Address implements Cloneable{ private String address; public Address(String address) { this.address = address; } @Override protected Object clone() throws CloneNotSupportedException { .原创 2020-08-31 16:08:05 · 213 阅读 · 0 评论 -
洗脚城的管理模式:代理模式
生活中的栗子去过洗脚城的同学都知道按摩的是13号技师,收费的却是黑心老板,为啥不是13号小妹呢?这又是为啥捏?我们的13号技师兢兢业业只为了服务更好、技艺更精湛,并不懂招揽顾客以及谈判价钱。黑心老板的出现可以让13号技师更专注于自己的事业,又可以推出更多附加服务。这便是代理模式。下面咱们用代码实现接口类 Message.javapublic interface Message { // 马杀鸡服务 void message();}实现类 Worker13.javapub.原创 2020-08-28 10:45:00 · 831 阅读 · 0 评论 -
Java反射机制---深入理解
本文将从源码处分析反射各部分实现举个栗子public class ReflectClass { public static void main(String[] args) { try { Class clz = Class.forName("com.example.lib.bean.Man"); Object object = clz.newInstance(); Method method = .原创 2020-08-27 14:56:25 · 397 阅读 · 0 评论 -
Java 反射机制---基本用法
反射定义百度定义:Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。自己的理解:反射就是把类的各个成分映射成对象,构造函数、变量、函数都映射成对象进行操作。反射的基本用法Man类: public class Man { public Man() .原创 2020-08-24 21:48:11 · 173 阅读 · 0 评论 -
Java 回调小记
网上回调都是例子比较多,本文只记用法两个接口,一个是Boss的回调接口,一个是员工的执行接口Boss的接口/** * 回调的方法,boss实现 */public interface CallBack { // 完成 void complete(String content);}员工的接口/** * 员工接口 */public interface GetJob { /** * 接受任务 */ vo.原创 2020-08-21 10:34:48 · 151 阅读 · 0 评论 -
JVM:双亲委托机制小记
双亲委托机制作用是啥,举个栗子:能不能自己写个类叫java.lang.System? —不能,为啥呢?为了系统类的安全,类似“ java.lang.Object”这种核心类,jvm需要保证他们生成的对象都会被认定为同一种类型。即“通过代理模式,对于 Java 核心库的类的加载工作由引导类加载器来统一完成,保证了 Java 应用所使用的都是同一个版本的 Java 核心库的类,是互相兼容的”。那JVM如何认定两个对象是否属于同一类型,必须同时满足下面两个条件: 都是同名...原创 2020-08-03 19:53:43 · 180 阅读 · 0 评论 -
注解与反射:Source级别
什么是注解? Annontation是Java5开始引入的新特征,中文名称叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且供指定的工具或框架使用。Annontation像一种修饰符一样,应用于包、类型、构造方法、方法、成员变量、参数及本地变量的声明语句中。 注解本身没有任何意义,单独的注解就是一...原创 2020-08-02 19:40:34 · 1145 阅读 · 1 评论 -
Android:PopWindow用法记录
开发中遇到的还挺多的,在此记录下简单用法private PopupWindow popupWindow;private View popView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);fin...原创 2020-07-13 16:08:29 · 361 阅读 · 0 评论 -
Kotlin : 自定义View--FlowLayout
先放代码,注释写的还是比较清楚的,后续再做补充/** * Created by Vola on 2020/7/5. */class FlowLayout : ViewGroup { private var TAG = "FlowLayout" // 每个item横向间距 private val mHorizontalSpacing: Int = dp2px(16) // 每个item纵向间距 private val mVerticalSpacin原创 2020-07-06 13:54:19 · 485 阅读 · 0 评论 -
Java:JVM深入理解
JVM出现是为了解决什么问题?JVM出现的原因Windows系统上的软件包后缀是exe,在苹果系统上无法安装。相应的苹果上的安装包是dmg后缀,无法在Windows安装。为啥捏?exe后缀的软件代码最终编译成Windows系统能识别的机器码,苹果系统亦然。那有没有一个办法可以让一套代码在不同系统上运行?JAVA为什么可以跨平台?JVM做了什么?那Java代码为什么可以在Linux、Windows、Mac OSX系统上运行?Java代码不直接编译成机器码而是编译成字节码,JVM.原创 2020-06-14 10:40:06 · 497 阅读 · 0 评论