JAVA基础知识总结
NullPointerExcept
这个作者很懒,什么都没留下…
展开
-
JAVA对象中POJO、PO、BO、VO、DTO你能分清吗?
前言很多JAVA书都会提到POJO对象,有时候也会说Bean,尤其spring中,所有对象都称为Bean,有时候项目中有个vo包、也有model包,这些对象都是怎么区分的呢?JavaBeanJavaBean是一种JAVA语言写成的可重用组件。JavaBean符合一定规范编写的Java类,不是一种技术,而是一种规范。大家针对这种规范,总结了很多开发技巧、工具函数。...原创 2019-05-09 18:52:19 · 630 阅读 · 2 评论 -
HashMap深度分析
这次主要是分析下HashMap的工作原理,为什么我会拿这个东西出来分析,原因很简单,以前我面试的时候,偶尔问起HashMap,99%的程序员都知道HashMap,基本都会用Hashmap,这其中不仅仅包括刚毕业的大学生,也包括已经工作5年,甚至是10年的程序员。HashMap涉及的知识远远不止put和get那么简单。本次的分析希望对于面试的人起码对于面试官的问题有所应付。一、先来回忆下我的转载 2017-06-30 13:52:25 · 372 阅读 · 0 评论 -
你所不知的 java 枚举
java中的枚举在实现上非常简单,以下就是一个枚举的例子:但是如果反编译FruitEnum.class,会发现编译器在背后默默的做了大量的工作,以下是反编译结果:下面根据反编译结果说明枚举的几个特性。枚举的实际类型说明枚举是类,并且是用 final 修饰的类,意味着枚举不能再被继承扩展。转载 2017-06-09 09:41:00 · 271 阅读 · 0 评论 -
XML中的转义字符
HTML中的转义字符 HTML中,&等有特别含义,(前两个字符用于链接签,&用于转义),不能直接使用。使用这三个字符时,应使用他们的转义序列,如下所示:& 或 &&和< 或 小于号> 或 >>大于号"转载 2017-06-08 14:14:30 · 3125 阅读 · 0 评论 -
ConcurrentHashMap从jdk1.7到jdk1.8的变化
一、简单回顾ConcurrentHashMap在jdk1.7中的设计 先简单看下ConcurrentHashMap类在jdk1.7中的设计,其基本结构如图所示:每一个segment都是一个HashEntry[] table, table中的每一个元素本质上都是一个HashEntry的单向队列。比如table[3]为首节点,table[3]->next为节点转载 2017-06-29 10:14:44 · 285 阅读 · 0 评论 -
谈谈ConcurrentHashMap1.7和1.8的不同实现
知止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得。ConcurrentHashMap在多线程环境下,使用HashMap进行put操作时存在丢失数据的情况,为了避免这种bug的隐患,强烈建议使用ConcurrentHashMap代替HashMap,为了对ConcurrentHashMap有更深入的了解,本文将对ConcurrentHashMap1.7和1.8的不同实现进行转载 2017-06-29 10:14:03 · 398 阅读 · 0 评论 -
Java 8系列之重新认识HashMap
摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。简介Java为数据结构中的映射定义了一个接口j转载 2017-06-29 10:13:21 · 249 阅读 · 0 评论 -
HashMap在Java1.7与1.8中的区别
基于JDK1.7.0_80与JDK1.8.0_66做的分析 JDK1.7中使用一个Entry数组来存储数据,但是这个Entry是链表结构,如果插入的key的hashcode相同(hash collision),那么这些key会被定位到Entry数组的同一个格子里,这些key会形成一个链表。在hashcode特别差的情况下,比方说所有key的hashcode都相同,这转载 2017-06-29 10:10:57 · 4717 阅读 · 1 评论 -
Java的基本功:少侠,一定要学好这些
1. Java数组与内存控制一、Java数组初始化Java数组是静态的,即当数组被初始化之后,该数组的长度是不可变的。Java数组使用之前必须先对数组对象进行初始化,所谓初始化,就是为数组的所有元素分配内存空间,并为每个数组元素指定初始值。Java基本类型数组的两种初始化方式静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度。转载 2017-05-31 09:24:00 · 623 阅读 · 0 评论 -
[经典]技术面试宝典: 很全面的算法和数据结构知识(含代码)
本文汇总了技术面试时需要了解的算法和数据结构知识。 数据结构部分 链表链表是一种由节点(Node)组成的线性数据集合,每个节点通过指针指向下一个节点。它是一种由节点组成,并能用于表示序列的数据结构。单链表:每个节点仅指向下一个节点,最后一个节点指向空(null)。双链表:每个节点有两个指针p,n。p指向前一个节点,n指向下一个节点;最后一个节点指向空。转载 2017-07-03 09:11:37 · 415 阅读 · 0 评论 -
JAVA实现AES加密
JAVA实现AES加密1. 因子 上次介绍了《JAVA实现AES加密》,中间提到近些年DES使用越来越少,原因就在于其使用56位密钥,比较容易被破解,近些年来逐渐被AES替代,AES已经变成目前对称加密中最流行算法之一;AES可以使用128、192、和256位密钥,并且用128位分组加密和解密数据。本文就简单介绍如何通过JAVA实现AES加密。2. JAVA实现闲话少许转载 2017-06-23 14:09:32 · 423 阅读 · 0 评论 -
三十岁应该知道的职场规则
开篇记千里之行始于足下,做技术这行更多的是要脚踏实地,逐步积累的过程。做编程不能浮躁,要想提高技术不仅要读万卷书,还要加以更多的实践才能提高自己的水平。猫叔毕业以来,参加工作五年半,仍觉编程知识匮乏,实践不足。由此,开此公号以记录工作之点滴,同时系统梳理知识理论以备此后翻阅。也希望刚踏入编程之门的后来人能从此公号得到一点点启发和成长,慢慢深夜聊以慰藉。开此号,也不止为了谈技术,猫叔也会把在职场...原创 2019-05-09 09:59:19 · 429 阅读 · 0 评论 -
YAML快速入门
我们学习Java,都是先介绍properties文件,使用properties文件配合Properties对象能够很方便的适用于应用配置上。然后在引入XML的时候,我们介绍properties格式在表现层级关系和结构关系的时候,十分欠缺,而XML在数据格式描述和较复杂数据内容展示方面,更加优秀。到后面介绍JSON格式的时候,我们发现JSON格式比较XML格式,更加方便(除去数据格式限制之外),所以...转载 2018-10-19 14:58:02 · 591 阅读 · 0 评论 -
内核态和用户态的区别
当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。即此时处理器在特权级最低的(3级)用户代码中运行。当正在执行用户程序而突然被中断程序中断时,此时用户程序...转载 2018-05-25 11:06:02 · 1295 阅读 · 0 评论 -
Java 9 新特性,看这里就明白了
摘要:1.目录结构2.repl工具 jShell命令3.模块化4.多版本兼容jar包5.接口方法的改进(在接口中 jdk7 只能声明全名常量和抽象方法 jdk8 添加了静态方法和默认方法 jdk9添加了私有方法)6.钻石操作符升级 可以有{}7.异常处理try升级8.下划线标识符命名的限制 _ 不允许了9.String底层存储结构的变更(char数组变成byte字节数组)10.增强了Stream ...转载 2018-03-26 09:27:38 · 6966 阅读 · 1 评论 -
java try后面括号的作用
Java7新特性,支持使用try后面跟随()括号管理释放资源例如通常使用try代码块 1 try { 2 fis = new FileInputStream(source); 3 fos = new FileOutputStream(target); 4 5 byte[] buf = new byte[8192]; 6 ...转载 2018-03-07 16:49:28 · 8147 阅读 · 1 评论 -
你必须理解的计算机核心概念
前言: 计算机学科中有很多概念, 例如编码(原码,补码,反码), 虚拟内存, 文件, IO, 编译,链接,分组交换,关系, 事务,范式, Hash, 加密。。。等等,本文试图讲一下最重要的核心集合,从这个集合当中就可以变换出计算机编程的各种魔法。 1 冯·诺依曼结构计算机的原理 所有的计算机语言,不管是Java, Python, Go, C, C++, PHP...... , 无转载 2017-07-17 09:14:16 · 473 阅读 · 0 评论 -
35+ 个 Java 代码性能优化总结
前言 代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每转载 2017-06-27 09:20:17 · 374 阅读 · 0 评论 -
Java volatile 原理解析
用volatile修饰的变量能够保证其对所有线程的可见性,要理解这一点,我们首先需要了解Java的内存模型。1.Java内存模型Java内存模型分为主内存和工作内存。主内存是对所有线程所共享的,此外每个线程有自己的工作内存,工作内存不共享。线程在工作时,从主内存中拷贝所需变量到自己的工作内存中。线程对变量的所有操作,都必须在工作内存中转载 2017-06-12 09:12:57 · 1738 阅读 · 0 评论 -
java 获取系统变量(环境变量和设置变量)
前言环境变量这个概念不陌生, 就是操作系统的环境变量。系统变量就是java本身维护的变量。 通过 System.getProperty 的方式获取。对于不同的操作系统来说, 环境变量的处理可能会有一些不统一的地方, 比如说: 不区分大小写 等等。Java 获取环境变量Java 获取环境变量的方式很简单: System.getE转载 2017-04-25 14:32:56 · 5603 阅读 · 0 评论 -
对Java Inputstream的一次采访
在学习java.io.*包的时候,InputStream那一群类很让人反感,子类繁多就不用说,使用起来非常奇怪。我们想以缓存的方式从文件中读取字节流。总要先创建一个FileInputStream,然后把它放入BufferedInputStream构造函数中去创建BufferedInputStream。完成这些工作后才能开始读取文件。为什么我们转载 2017-05-26 09:32:31 · 362 阅读 · 0 评论 -
深入分析Java方法反射的实现原理
“物有本末,事有始终。知其先后,则近道矣”前段时间看了笨神的 从一起GC血案谈到反射原理一本,就把Java方法的反射机制实现撸了一遍。方法反射实例public class ReflectCase { public static void main(String[] args) throws Exception { Proxy target = new转载 2017-05-25 09:13:58 · 444 阅读 · 0 评论 -
Java时间和时间戳的相互转换
时间转换为时间戳: /* * 将时间转换为时间戳 */ public static String dateToStamp(String s) throws ParseException{ String res; SimpleDateFormat simpleDateFormat = new SimpleDa转载 2016-12-21 14:58:31 · 1275 阅读 · 0 评论 -
Java:按值传递还是按引用传递详细解说
前天在做系统的时候被Java中参数传递问题卡了一下,回头查阅了相关的资料,对参数传递问题有了新的了解和掌握,但是有个问题感觉还是很模糊,就是Java中到底是否只存在值传递,因为在查阅资料时,经常看到有人说Java只有值传递,但有人说既有值传递,也有引用传递,对于两个观点个人觉得应该是站的角度不同而得出两个不同的说法,其实两个说法其中的原理是一样的,只要咱们懂得其中的原理,那么至于叫什么也就无所谓了转载 2016-12-16 16:17:19 · 258 阅读 · 0 评论 -
我是一块硬盘(下)
前言:接上一篇《我是一块硬盘(上)》,这一篇稍微有点难度。目录我问老大:每个文件都需要有个inode来描述,每个目录是不是也需要一个?”这是自然,和文件一样,每个目录也是一个inode, 其中有目录的属性,还有存放这个目录内容的磁盘块号,在磁盘块中才真正的存放着目录下的内容““举个例子来说吧: 有人要读取 /tmp/test.log这个文转载 2016-12-06 10:11:27 · 440 阅读 · 0 评论 -
我是一块硬盘(上)
序我知道CPU和内存是计算机的核心,毕竟所有的运算最后都得通过他们俩来完成,CPU从内存里要取一条指令,做计算,然后再写回内存,如此周而复始。但是这俩货却瞧不起我,说这是什么年代了,还在用机械式操作, 读写数据的时候, 还得一个磁头在多个盘片上滑来滑去,找来找去, 速度慢的要死。内存说:“CPU比我快100倍, 比你快100万倍,整个系统的速度都转载 2016-12-06 10:10:34 · 446 阅读 · 0 评论 -
Java中的六种数据存储
在JAVA中,有六个不同的地方可以存储数据:1. 寄存器(register)。这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。2. 堆栈(stack)。位于通用RAM中,但通过它的“堆栈指针”可以从处理器哪里获得支持。堆栈指针若向下移动,则分配新的内存;转载 2016-12-04 14:10:18 · 654 阅读 · 0 评论 -
UML类图几种关系的总结
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency) 1. 泛化(Generalization) 【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特转载 2016-12-04 13:38:27 · 267 阅读 · 0 评论 -
java Pattern和Matcher详解
结论:Pattern与Matcher一起合作.Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持. 单独用Pattern只能使用Pattern.matcher(String regex,CharSequence input)一种最基础最简单的匹配。java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现(建议在阅转载 2016-11-09 15:31:22 · 259 阅读 · 0 评论 -
Bean复制的几种框架性能比较(Apache BeanUtils、PropertyUtils,Spring BeanUtils,Cglib BeanCopier)
作为一个新员工,一个首要的工作就是阅读别人的代码,阅读代码的诸多好处就不说了,我就直奔主题,通过预读代码,发现了几种实现两个不同类型的Bean之间实现值复制的几种方式,上网查询后发现性能上会有差异,于是就萌生自己深入了解几种实现的想法。第一步就是先本着实事求是的原则去探求一下大家总结出来的性能差异是否正确。 比较的是四种复制的方式,分别为Apache的BeanUtil转载 2016-07-20 17:02:05 · 803 阅读 · 0 评论 -
Java删除List和Set集合中元素
今天在做项目时,需要删除List和Set中的某些元素,当时使用边遍历,边删除的方法,却报了以下异常:ConcurrentModificationException为了以后不忘记,使用烂笔头把它记录如下:错误代码的写法,也就是报出上面异常的写法:Java代码 Set set = this.getUserDao().getAll(qf).get(0转载 2016-12-28 15:01:46 · 2620 阅读 · 0 评论 -
ArrayList和LinkedList的区别
一般大家都知道ArrayList和LinkedList的大致区别:1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。转载 2016-12-20 10:13:41 · 280 阅读 · 0 评论 -
JAVA集合框架中的常用集合及其特点、适用场景、实现原理简介
JDK提供了大量优秀的集合实现供开发者使用,合格的程序员必须要能够通过功能场景和性能需求选用最合适的集合,这就要求开发者必须熟悉Java的常用集合类。本文将就Java Collections Framework中常用的集合及其特点、适用场景、实现原理进行介绍,供学习者参考。当然,要真正深入理解Java的集合实现,还是要推荐去阅读JDK的源码。Java提供的众多集合类由两大接口衍生而来:Co转载 2017-05-23 17:35:43 · 532 阅读 · 0 评论 -
编码的故事
快下班了,爱问问题的小朋友Nico又问了一个问题:“sqlserver里面有char和nchar,那个n据说是指unicode的数据,这个是什么意思。”并不是所有简单的问题都很容易回答,就像这个问题一样。于是我答应专门写一篇文章来从头讲讲编码的故事。那么就让我们找个草堆坐下,先抽口烟,看看夜晚天空上的银河,然后想一想要从哪里开始讲起。嗯,也许这样开始比较好……很久很久以前,转载 2017-04-21 09:17:49 · 1345 阅读 · 0 评论 -
浅谈Java中的几种随机数
在Java中生成随机数只要简单的调用:java.lang.Math.random() 在所有其他语言中,生成随机数就像是使用Math工具类,如abs, pow, floor, sqrt和其他数学函数。大多数人通过书籍、教程和课程来了解这个类。一个简单的例子:从0.0到1.0之间可以生成一个双精度浮点数。那么通过上面的信息,开发人员要产生0.0和10.0之间的双精度浮点数会这样来转载 2017-05-02 09:15:17 · 379 阅读 · 0 评论 -
java枚举类Enum简洁
Enum作为Sun全新引进的一个关键字,看起来很象是特殊的class, 它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口。 当我们在声明一个enum类型时,我们应该注意到enum类型有如下的一些特征。 1.它不能有public的构造函数,这样做可以保证客户代码没有办法新建一个enum的实例。 2.所有枚举值都是public , static , fin转载 2017-05-02 09:13:32 · 566 阅读 · 0 评论 -
常用加密算法比较研究
信息加密技术是利用数学或物理手段,对电子信息在传输过程中和存储体内进行保护,以防止泄漏的技术。由于计算机软件的非法复制,通信的泄密、数据安全受到威胁,解密及盗版问题日益严重,甚至引发国际争端,所以在信息安全技术中,加密技术占有不可替代的位置,因此对信息加密技术和加密手段的研究与开发,受到各国计算机界的重视,发展日新月异转载 2017-05-02 09:13:03 · 865 阅读 · 0 评论 -
Java帝国之拨云见日识回调
故事背景在日常编程中,我们经常需要对内存的数据进行持久化的工作,把他们保存在硬盘文件或者数据库中。为了避免重复, 我们通常会把这部分工作封装在一个工具类中, 让各个客户端来调用。下文的FileIO就是一个简单的工具类(为了简单起见,并没有使用单例或静态方法来实现)小张的烦恼Java 帝国的FileIO是一个忙碌的家伙,附近7、8个村落的人都来找他, 请他把数转载 2017-02-13 11:27:45 · 350 阅读 · 0 评论 -
GBK,UTF-8,和ISO8859-1之间的编码与解码
Unicode、UTF-8 和 ISO8859-1到底有什么区别将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 cec4",Unicode编码为"4e2d 6587",UTF编码就是"e4b8ad e69687"。注意,这两个字没有iso8859-1编码,但可以用iso8859-1编码来"表示"。 2. 编码基本知识 最早的编码是iso8859-1转载 2017-03-01 16:10:31 · 1416 阅读 · 0 评论 -
Java 异常处理的误区和经验总结
导语在写代码的过程中,我们往往会忽略一些异常处理的基础知识。本文旨在介绍 Java 异常的常见误区和一些细节处理,包括异常的选择、错误代码的利用、处理多层次的异常、以及如何添加有效信息到异常等。本文着重介绍了 Java 异常选择和使用中的一些误区,希望各位读者能够熟练掌握异常处理的一些注意点和原则,注意总结和归纳。只有处理好了异常,才能提升开发人员的基本素养,提高系统的健壮性,提升转载 2016-12-21 09:10:36 · 358 阅读 · 0 评论