自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 问答 (2)
  • 收藏
  • 关注

原创 ThreadLocal 类

ThreadLocal 类精讲文章目录ThreadLocal 类精讲1. ThreadLocal 概述2. 提供线程上下文能力3. 线程上下文的延迟加载4. 单线程绑定多 ThreadLocal 实例5. 单 ThreadLocal 实例被多个线程共享6. 线程上下文的内存回收问题7. InheritableThreadLocal 类1. ThreadLocal 概述ThreadLocal ...

2020-04-21 14:07:44 592

转载 2020 阿里云 Maven 配置

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 h...

2020-04-18 21:39:02 1448

原创 事件驱动和消息驱动

事件驱动和消息驱动消息驱动和事件驱动很类似,都是先有一个事件,然后产生一个相应的消息,再把消息放入消息队列,由需要的项目获取。他们的区别是消息是谁产生的消息驱动:鼠标管自己点击不需要和系统有过多的交互,消息由系统(第三方)循环检测,来捕获并放入消息队列。消息对于点击事件来说是被动产生的,高内聚。事件驱动:鼠标点击产生点击事件后要向系统发送消息 “我点击了” 的消息,消息是主动产生的。再发送到...

2020-04-17 10:26:15 4781

原创 Java 中的 tagging interface

什么是 tagging interface?在 Servlet 源码中,所有的监听器类都实现了空接口 EventListener,代码如下所示:package java.util;/** * A tagging interface that all event listener interfaces must extend. * @since JDK1.1 */public int...

2020-03-26 11:09:10 385

原创 编译 Servlet 代码

引子:把网上一个项目中的 Servlet 代码下载的本地后,出现了入下的错误:java.lang.UnsupportedClassVersionError,含义是高版本的 JDK 编译的 Java class 文件试图在较低版本的 JVM 上运行导致的错误。既然如此,就需要重新编译一遍相关 Java 文件了。首先 javac 命名 JDK 提供的编译软件,对于此命令,所需的 option ...

2020-03-16 12:57:51 369

原创 从强耦合到行为化参数最终到 Lambda 表达式

从强耦合到行为化参数最终到 Lambda 表达式Java 语法层面上的这种变化应当站在历史的角度上来考虑,站在后 Java8 时代,一切并非是理所当然。1. 强耦合实现 首先给出本次讨论的背景。农民希望你能够进行苹果库存的筛选,不过他作为甲方,需求经常会改变。筛选一个库房的所有苹果实际上可以分为两个要素:筛选苹果的条件;迭代集合逻辑; 在强耦合中,两个要素是捆绑在一起的,比...

2020-02-29 13:37:11 174

原创 Java-Launcher类上打断点无效的案例解读

Java-Launcher类上打断点无效的案例解读这是一个有意思的案例~ 首先,以下是一个广为流传的说法: 内建于 JVM 中的启动类加载器(Bootstrap Class Loader)会加载 java.lang.ClassLoder 以及其他 Java 平台类,Launcher 类由此被启动类加载器加载和初始化,因为 Launcer 的静态代码会产生一个 Luancher 实例,继而...

2020-02-18 22:38:06 638

原创 环境变量详解

环境变量详解当前文章以 Java 为例,但是编程语言在环境变量上的知识大同小异,思想是相同的。为什么要设置环境变量 在终端输入的命令行对应着应用程序,如果不是系统自带的命令,那么系统需要环境变量来定位应用程序所在的文件路径。同时配置多个环境变量一个语句中可以同时附上多个环境变量:在 Windows 系统中 PATH 变量中的所有路径采用分号 ; 分割;在 Linux 系统...

2020-02-07 21:44:36 704

原创 计算机语言的分类

计算机语言的分类 到目前为止,我自己学过或者说碰过的语言有 C、Java、JavaScript、Python、Go。最近在学的是 Go,看到 Go meta描述是:静态、编译型。但是突然发现自己对于编译型的理解就是:该种语言若要执行,则需要从源码转换为二进制,而语言的静态和动态却摸不着头脑。看来自己基础不牢,需要总结了。语言大致可以按一下分类:编译型、解释型、混合型;动态类型语言、静态类...

2020-02-03 15:42:59 2621

原创 Java 中的 Vector、Stack 与 ArrayList

引子:首先不得不说, Vector 与 Stack 这一继承设计是蹩脚、失败的。比如见于 coderanch 的一个问题:Stack extends Vector !The java.util.Stack extends the Vector class. But for Stack, one should be able to insert or retrive the value fr...

2020-01-20 19:24:07 298

原创 Java 编译期常量

Java 编译期常量1. 什么是编译期常量 编译期常量,即 compile-time constant。其看似是一个静态,并不一定是由 static 修饰(static 一般只是用于强调只有一份),但强制要求使用 final 进行修饰。编译期常量完整要求是:declared final;被声明为 final(所有编译期常量都满足的条件);primitive or String;基本类型或...

2020-01-19 14:17:16 1077

原创 CatalinaDaemon 中的反射机制

引子:最近学了一下 Tomcat ,觉得自己有必要回顾一下 Java 反射机制,加深理解了。一、反射知识的回顾 这里部分引用 李兴华的java se 实战经典中对 Java 反射的讲解。 反射之中包含了一个“反”的概念,所以要想解释反射就必须先从“正”开始解释,一般而言,当用户使用一个类的时候,应该先知道这个类,而后通过这个类产生实例化对象,但是“反”指的是通过对象找到类。package ...

2020-01-10 21:58:15 247

原创 编程语言的学习方法

在看《代码之髓》一书的摘录:具体的知识和抽象的知识在语言 X 中如何实现 Y,像这种具体的知识(know-how)可快速提高你的工作效率。但是一旦语言发生变化,这种知识就无法再使用。世界瞬息万变,这意味着限定了应用范围的具体知识将慢慢失去其价值。因此,我们不仅要学习具体的知识,更要有意识地去学习那些应用范围广泛的抽象的概念。当然,学习了抽象的元知识,如果不将其与你具体的经验相结合,也无法在实...

2019-11-29 16:12:42 148

原创 Java-深入理解ServiceLoader类与SPI机制

Java-ServiceLoader类与SPI机制引子对于Java中的Service类和SPI机制的透彻理解,也算是对Java类加载模型的掌握的不错的一个反映。了解一个不太熟悉的类,那么从使用案例出发,读懂源代码以及代码内部执行逻辑是一个不错的学习方式。一、使用案例通常情况下,使用ServiceLoader来实现SPI机制。 SPI 全称为 (Service Provider Inte...

2019-11-11 20:32:45 933

原创 使用SourceInsight来查看OpenJDK源代码

使用SourceInsight来查看OpenJDK源代码由于OpenJDK的目录书结构和OracleJDK目录树结构有所区别,所以对于新手而言查看开源的JDK类源码有所难度,所以本文就来介绍一下如何利用OpenJDK源代码。1.首先你需要有OpenJDK源代码,一般下载压缩包即可,如果你不知道如何在官网下载,那么以下是我提供的OpenJDK1.8版本:链接:https://pan.baidu...

2019-11-08 17:44:45 1504

原创 记录一个我所遇到的 java.lang.NoClassDefFoundError 异常

问题出现的原因:虽然在IDE中的目录结构下有相关的.class文件,但是由于由于在根类加载器的类加载目录下放置了部分.class文件,但不是全部.class文件,所以报错。解决途径:删除相关根类加载器的目录结构在根类加载器的目录结构下放置全部相关的.class文件案例详细:根类加载器的有效目录:public static void main(String[] args) { ...

2019-11-04 17:06:00 223

转载 Java MorseCoder - Java 语言实现的摩尔斯电码编码解码器

最近在看《编码-隐匿在计算机软件背后的语言》这本书,看到了一张译码表很有意思:不免让我会想起本科在学编码的那段轻松岁月,于是就去查了如何用Java代码实现这个摩尔的编码和译码过程,代码如下:MorseCoder是主类,Test是测试用类:import java.util.HashMap;import java.util.Map;import java.util.StringTokeni...

2019-11-03 17:57:53 1721 1

原创 北邮通信原理知识点笔记小结-下半部分

北邮通信原理知识点笔记小结-下半部分文章目录第四章 模拟通信1.抽样定理第五章 信道1. 狭义信道与广义信道2. 时变和恒参的区别3. 调制信道/连续信道/模拟信道模型4. 编码信道模型5. 恒参信道特性及其对信号传输影响第六章 数字基带信号1.数字基带信号概述2. 数字基信号的时域以及频域特征3.传输码的主要特征4. 基带脉冲传输与码间干扰5. 无码间干扰的基带传输系统的抗噪声性能6.部分响...

2019-11-03 14:57:11 4644 1

原创 Java-线程中的异常

1.尝试使用外部线程捕获子线程运行时错误给出以下例子,我想问题是线程t1运行期间抛出的异常能够被捕获吗?(这是一个相当好的问题~)/** * @author Fisherman * @date 2019/9/4 */public class TempTest { public static void main(String[] args) { Thread...

2019-10-31 16:48:29 230

原创 北邮通信原理知识点笔记小结-上半部分

北邮通信原理知识点小结-1文章目录北邮通信原理知识点小结-1第一章 绪 论1. 数字信号和模拟信号的比较2. 离散消息的信息量3. 通信系统的主要性能指标第二章 随机过程1. 随机过程的基本概念2. 分布函数和概率密度3. 随机过程的数字特征4. 平稳随机过程5. 自相关函数与功率谱密度的傅里叶关系6. 白噪声7. 高斯随机过程第三章 确定信号分析1.引言2.周期信号3. 能量信号与功率...

2019-10-27 21:40:31 5207

原创 使用命令行来运行Java程序

使用记事本写入以下代码:public class HelloWorld{ public static void main(String[] args){ System.out.println("Hello Java"); }}注意事项:将文件名存为.java格式即可,并且不需要改变编码类型,为默认的ANSI即可,否则会报错:错误: 需要class, interface或enum...

2019-10-26 14:32:30 222

原创 Java-IO 流的Close方法

一、在Java中为何要关闭流GC运行的时间点是不确定的(因为是一条单独存在的线程),所以很多时候你不能直接控制什么时候发生GC。这个带来的问题有两点,一个是有时候你的内存不足需要立刻回收而GC并不会立刻运行;另外一个是因为GC运行期间会占用大量系统资源所以某些情况下你会希望把它推后,或者干脆关掉以便根据性能需求在合式的时候手动执行。另外,GC只能回收内存。至于各种stream之类,他们下边一般...

2019-10-24 14:18:04 4905

原创 Java-输入输出流的简单看法与总结

Java-输入输出流的简单看法与总结 为什么Java中关于输入输出流(IO流)的对象为什么这么多,实在难以记忆,这可能是绝大多数人在学习关于Java此内容的问题,下面就来总结一下这个知识点,让这个困难得到解决。一、理解Java的IO模型和框架实际上对于Java输入输出流的所有概念在下图中就已经完整地体现了:还有不得不提一下Java的IO框架:弄明白上面两张图,你就可以说已经理解了Ja...

2019-10-21 20:17:17 592 1

原创 java – 为什么InputStream#read()返回一个int而不是一个字节?

这个是一个有意思的问题,所以我在这里记录一下。首先字节正好是8位,所以使用8位的char类型数据来与字节数据相互一一对应是最好的选择?但是为何方法InputStream#read()需要返回int类型值呢?首先,我们要完成一个EOF(End of File)判断,在Java中就是以-1来表示数据读完了,但是如果返回的char类型值,那么根本没有-1这个数值;如果换种方式,返回一个特殊的char...

2019-10-21 11:56:18 692 1

转载 Java,bit比特,byte字节,char字符,short,int,long,float,double,string,字母,汉字/编码等

如题,做个重新认识的总结,只供参考,如果不准确的,请回复,谢谢bit: 1 bit位 = 1 二进制数据byte: 1 byte = 8 bit位 (-128 ~ 127)字母: 1 字母 = 1 byte = 8 bit(位)short: 16位char: Unicode字符,16bit位int: 32bit位,比如int 类型占用4个字节,32位long: 64bit位floa...

2019-10-21 10:33:44 326

原创 学习SQLite之前:什么是数据库,RDBMS指的是什么?

一、什么是数据库(DBMS)维基百科对此的解释是:数据库管理系统(英语:Database Management System,简称DBMS)是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。数据库管理系统可以依据它所支持的数据库模型来作分类,例如关系式、XML;或依据所支持的计算机类型来作分类,例如服务器聚类、移动电话;或依据所用查询语言来作分类,例如SQL、X...

2019-10-15 18:14:38 3292

转载 优化使用BaseAdapter

本节引言:上一节中我们学习了如何来使用一个ListView以及自定义一个简单的BaseAdapter,我们从代码中可以看出比较重要的两个方法:getCount()和getView(),界面上有多少列就会调用多少次getView, 这个时候可能看出一些端倪,每次都是新inflate一个View,都要进行这个XML的解析,这样会 很浪费资源,当然,几十列或者几百列的列表并不能体现什么问题,但假如更...

2019-10-12 21:06:53 135

原创 Andorid-ListView简单使用以及BaseAdapter入门

1.自定义BaseAdapter,然后绑定ListView的最简单例子先看看我们要实现的效果图:一个很简单的ListView,自己写下Item,然后加载点数据这样~ 下面贴下关键代码:Animal.java:/** * Created by Jay on 2015/9/18 0018. */public class Animal { private String aName...

2019-10-12 19:38:17 405

原创 如何优雅地在Stack OverFlow 上进行编程问题搜索

引子百度上搜索编程问题还是一言难尽,有些问题实在是不适合在中文引擎下进行搜索,所以还是要学会科学上网,一个好程序员的英语一定是最好的,全世界90%的编程资源都是以英语形式展现,如果不学好一门外语,恐怕在国内只能学习落后于世界2-3年的编程知识。方法话不多说,我以我的一个编程问题为例来展示如何在StackOverflow上搜索问题:问题:在Android中,如果要重写BaseAdapter类...

2019-10-12 15:11:49 4351

原创 学习Android时发现别人已写的方法已被弃用怎么办

问题描述在学习Android时我们肯定要敲别人的代码,而过去时间写的代码在高API版本中很容易遇到已被启动的情况,下面就是这种情况的例子:但是我们如何才能找到这个方法的更新版本呢?首先我们打开Google的Android官方网站:Android Developers,如下所示:然后在搜索栏中搜索。但是注意我们不要直接搜索方法名,就如此例中的:getDrawable()方法,因为并不会提...

2019-10-09 17:43:28 2030

原创 Gradle中如何获取dependencies依赖库的最新版本号

Gradle中如何获取dependencies依赖库的最新版本号 初学Android,虽然自以为Java基础还行,上手应当是飞快,但还是栽了不少跟头,其中依赖库的最新版本号如何获取就是一个问题。以下我给出查找最新依赖库版本的案例,来说明解决这个问题的方案:案例:《我的第一行代码》一书中需要我们引入recyclerview第三方依赖库,让我们在dependencies中输入:compile '...

2019-10-06 23:06:43 3273

原创 安卓-碎片的使用入门

第四章-Android开发中的碎片4.1 碎片是什么 碎片(Fragment)是一种可以嵌入在活动当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用得非常广泛。虽然碎片对你来说应该是个全新的概念,但我相信你学习起来应该毫不费力,因为它和活动实在是太像了,同样都能包含布局,同样都有自己的生命周期。你甚至可以将碎片理解成一个迷你型的活动,虽然这个迷你型的活动有可能和普通的...

2019-10-06 20:53:46 2460

原创 第一章 类加载到卸载的全过程分析

类加载到卸载的全过程分析 在Java代码中,类型的加、连接与初始化过程都是在程序运行期间完成的。其中类型指我们定义的一个class、interface、enum,此时并未包含对象。这一点提供了更大的灵活性、增加了更多的可能性。每一个类都是由类加载器class loader 加载到内存当中的。1. Java虚拟机的生命周期JVM虚拟机最最本质上是一个进程,所以JVM和普通的进程一样,都是由生命...

2019-10-06 16:49:56 1313

原创 学习JVM知识点之前

 很多时候我们一些知识可能当时理解的非常好,但是过了一段时间后就发现自己忘记了,这是所有人都有的感觉,但是我们该如何来避免这个问题呢?最主要的做法就是既要有输入,也要有输出。而JVM作为一个特殊的知识点,我们的确很难去找到一个正确的学习方式去掌握。 我们需要刻意练习一些技术学习中遇到的一些重要知识点。我们既不能将所有学过的知识都应用于工作,也不能学好所有将来工作中会遇到的知识,基于这个事实我们不...

2019-10-04 00:33:33 297

原创 大大提高开发效率的几个IDE:IntelliJ IDEA 相关常用快捷键操作整理

一、搜索和查找相关快捷键快捷键作用Ctrl+N查找类Ctrl+Shift+N查找文件Ctrl+F查找文本Ctrl+Shift+Alt+N查找类中的方法或变量Ctrl+F12列出一个类的所有方法以及域二、继承相关快捷键快捷键作用Ctrl+h查看类/对象的继承关系Alt+Enter导入类所需要的包三、快...

2019-10-01 20:15:38 158 1

原创 安卓入门-第三章-安卓常用控件的使用方式

一、安卓常用控件的使用方式1.1 TextView TextView可以说是Android中最简单的一个控件了,你在前面其实已经和它打过一些交道了。它主要用于在界面上显示一段文本信息,比如你在第1章看到的“Hello world!”。下面我们就来看一看关于TextView的更多用法。<LinearLayout xmlns:android="http://schemas.android....

2019-09-23 19:58:05 361

原创 安卓入门-第二章-探究活动

一、引出 通过上一章的学习,你已经成功创建了你的第一个Android项目。不过仅仅满足于此显然是不够的,是时候学点新的东西了。作为你的导师,我有义务帮你制定好后面的学习路线,那么今天我们应该从哪儿入手呢?现在你可以想象一下,假如你已经写出了一个非常优秀的应用程序,然后推荐给你的第一个用户,你会从哪里开始介绍呢?毫无疑问,当然是从界面开始介绍了!因为即使你的程序算法再高效,架构再出色,用户根本不会...

2019-09-23 10:11:09 596

原创 Java并发-AbstractQueuedSynchronizer(AQS)JDK源代码分析

一、概要分析:1.1 引子 学习Java并发编程不得不去了解一下java.util.concurrent这个包,这个包下面有许多我们经常用到的并发工具类,例如:ReentrantLock,CountDownLatch,CyclicBarrier, Semaphore等。而这些类的底层实现都依赖于AbstractQueuedSynchronizer这个类,由此可见这个类的重要性。所以在Java并...

2019-09-22 12:43:52 389

原创 Java多线程-Furetue接口源代码详解

一、Furetue接口源代码详解1.1 Future的应用场景 不管是继承thread类重写run方法还是实现runnable接口实例对象后作为参数输入至Thread类的构造器中,都无法保证获取到之前的执行结果。通过实现Callback接口,并用Future可以来接收多线程的执行结果,而这就是我在上一篇关于Callable和Runnabe接口对比中的博客中所提到的,要彻底理解它们两者之间的差别...

2019-09-20 21:40:22 291 1

原创 Java并发-当compareAndSwapObject遇到自动装箱问题详解

一、引子 这篇文章用于记录我在尝试测试使用CAS机制下的compareAndSwapObject方法所遇到的问题:我的目的是想通过compareAndSwapObject方法调用是否能够满足“若不相同,则不更新”的性质,但是发现其总是返回false,后来意识到是int值自动装箱所导致的问题。接下来就来看代码吧。compareAndSwapObject方法简介: /**...

2019-09-20 21:02:00 1015

空空如也

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

TA关注的人

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