Core JAVA
上官云霆
好好码砖,攒钱娶老婆。
展开
-
图的路径遍历和层级遍历
图的路径遍历可以得到图的所有路径图,层级遍历可以得到这个图有多少层,方便我们系统逐级加载数据程序的主要功能输出路径图。首选获得所有的路径图,以list展示按层级展示(层级之间存在重复字段)。将这些路径图按层级进行归并。由于同一个字段可能以不同层级存在于一个字段,故两个层级之间存在重复字段)按层级展示。将第二步中的字段,从高层开始向下层开始遍历,如果存在重复字段,则删除底层的重复字段。import lombok.Getter;import lombok.Setter;import lomb原创 2021-11-22 13:42:09 · 1473 阅读 · 0 评论 -
机试题
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。代码/** * * <li>输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。</li> * <li>输入:nums = [1,2,3,4]</li&g原创 2020-10-28 15:16:23 · 431 阅读 · 0 评论 -
Java线程学习笔记(一)---启动和停止线程
线程是进程中的一个实体,是被系统独立调度和分派的基本单位。线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属于一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。 线程有就绪、阻塞和运行三种基本状态。线程的周期包括新建、就绪、运行、阻塞和死亡。线原创 2015-12-02 16:55:34 · 4760 阅读 · 0 评论 -
设计模式-单例模式
单例模式能够确保一个类只有一个实例。自行提供这个实例并向整个系统提供这个实例。本实例介绍如何使用这种设计模式及单例模式的呀用法实现单例模式的技术要点如下:1.单例模式有两种实现方式:第一种是将类的构造方法私有化,用一个私有的类变量instance保存类的实例,在加载类时,创建类的实例,并将实例赋给instance;然后再 提供一个公有的静态方法getInstance,用于获取类的唯一原创 2017-02-04 17:08:09 · 255 阅读 · 0 评论 -
Java安全学习笔记(十一)-RSA算法加密和解密
RSA算法是使用整数进行加密和解密运算的, 加密:在RSA公钥中包含了两个信息:公钥对应的整数e和用于取模的整数n。对于明文数字m,计算密文的公式是: m^e mod n. 解密:跟加密类似,私钥对应的指数e和用于取模的整数m.其中模m和加密时的加密的模n完全相同。对于密文数字d,计算公式d^e mod n。加密和解密最大的不同在于幂e不同。 本实例以加密和解密一个字符串”I am a原创 2017-08-31 11:06:19 · 1176 阅读 · 0 评论 -
NIO学习笔记
Java SE 1.4引入了大量用于改进输入/输出处理机制的特性,它们位于java.nio包。 该包中包含对下列特性的支持: 字符集编码器和解码器 非阻塞的I/O 内存映射文件 文件加锁机制1.内存映射文件 大多数操纵系统都可以利用虚拟内存实现来将一个文件或者文件的一部分“映射”到内存中。然后,这个文件就可以当做是内存数组一样地访问,这比传统的文件操...原创 2018-02-21 18:26:19 · 148 阅读 · 0 评论 -
线程池学习笔记
线程池的优点: 重用线程池中的线程,减少因对象创建,销毁所带来的性能开销; 能有效的控制线程的最大并发数,提高系统资源利用率,同时避免过多的资源竞争,避免堵塞; 能够多线程进行简单的管理,使线程的使用简单、高效。 线程池框架Executor java中的线程池是通过Executor框架实现的,Executor 框架包括类:Executor,Executors,ExecutorServic...原创 2018-02-28 16:36:04 · 222 阅读 · 0 评论 -
设计模式-简单工厂模式
工厂模式提供创建对象的接口,是最常用的设计模式。工厂模式有很多不同的分类,本实例介绍工厂模式之一的简单工厂模式的使用方法及使用规则。实现简单工厂模式的技术要点如下:1.简单工厂模式又称静态工厂模式。从命名上就可以看出这个模式很简单:定义一个用于创建对象的接口。2.简单工厂模式由工厂类角色、抽象产品角色和具体产品角色组成。3.工厂类角色是本模式的核心,含有一定的商业逻辑和判断逻辑原创 2017-02-04 12:57:28 · 361 阅读 · 0 评论 -
复杂JSON对象解析
面对复杂的json对象,一个json对象嵌套四五层,而且其中的数据类型可能是基本数据类型,对象,数组,map和list。对于这种情况,基本的json的jar包已经不能满足这些复杂的需求,需要用到阿里巴巴提供的fastjson的jar包,涉及到2个jar包fastjson-1.2.21-sources.jarfastjson-1.2.21.jarjson 中用到的数据类型1基本数据类型 : Stri原创 2018-01-02 10:28:40 · 5301 阅读 · 0 评论 -
Java文件IO学习笔记(五)-删除文件夹和文件
本实例介绍如何验证传入路径是否正确、如何删除系统上的文件或文件夹,包括删除文件夹下的所有文件。 删除文件与文件夹的技术要点如下: 1.File的delete()方法删除文件或文件夹。 2.当File指向一个文件夹时,必须保证文件夹下面的子文件或子目录为空,才能用delete()方法将这个文件夹删除。package core;import java.io.File;/** * 删除文件夹和文件原创 2017-09-06 16:51:58 · 1346 阅读 · 0 评论 -
Java安全学习笔记(六)-使用消息摘要验证口令
使用消息摘要验证口令本实例介绍如何使用所保存的消息摘要严恒用户输入的口令是否正确。若账号和口令都与保存在user_pass.txt中的相同,则提示“账号和口令都正确”,否则提示"错误的账号或口令"。不过这代码的逻辑总是有点奇葩哈哈。使用消息摘要验证口令的技术要点如下:1.读取文件中对应账号,口令的消息摘要2.生成用户输入的口令的消息3.将用户输入的口令的摘要和文件中保存的口令摘原创 2017-08-24 11:20:04 · 943 阅读 · 0 评论 -
Java安全学习笔记(八)-使用加盐技术防范字典式攻击
口令被轻松攻击的主要原因在于口令过短或者过于简单。如果口令很长,则计算所有组合的消息摘要可能要成百上千年,这将大大加大了生成字典的难度。同时口令过程也会给用户带来不便记忆的麻烦,因此用户使用的口令长度总是有限的。本实例将介绍如何使用加盐技术在有限的口令长度上防止字典式攻击。使用加盐技术防范字典式攻击的技术要点如下:账号口令初始化;生成随机数(盐)MessageDigest对象的应用原创 2017-08-29 10:55:13 · 1479 阅读 · 0 评论 -
Java安全学习笔记(十)-输出流的加密和解密
本实例演示了针对输出流的加密和解密。加密-将指定文件中的内容进行加密,并把加密的结果输入到指定的另外一个文件。输出流的加密和解密技术要点如下:1.密钥生成2.初始化密码器3.创建加密的输出流4创建CipherOutputStream对象5.写输出流package core;import java.io.FileInputStream;import java.i原创 2017-08-29 15:44:27 · 1724 阅读 · 2 评论 -
Java安全学习笔记(九)-输入流的加密和解密
针对流进行加密和解密,如对整个文件进行加密/解密或对网络通信进行加密/解密等。尽管可以先从流中读出字节,然后进行加密/解密,但是使用Java中针对流提供的专门的类更加方便。本实例展示如何针对输入流进行加密和解密。输入流的加密和解密的激素要点如下:1.密钥生成2.初始化密码器Cipher3.创建输入流4.创建CipherInputStream对象5.读取输入流packag原创 2017-08-29 14:46:42 · 2815 阅读 · 0 评论 -
Java反射机制笔记-反射机制
反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。Java反射机制是在进行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法。本实例介绍反射类的方法以及如何获得和调用其他类的属性、构造方法和方法信息。技术要点:运用反射的技术要点如下:反射机制最重要的内容-检查类的结构;反射机制提供以下功能:在运行时判断任意一个对象所属的类Class...原创 2017-08-07 14:55:25 · 672 阅读 · 3 评论 -
Java学习笔记---集合(二)Map
Java为数据结构中的映射定义了一个接口java.util.Map,它有HashTable、HashMap、WeakHashMap、LinkedHashMap以及TreeMap等实现类。Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复。使用映射的技术要点如下: HashMap是一个最常用的Map,它根据键的hashCode值存入数据,根据键...原创 2015-12-02 12:14:47 · 562 阅读 · 0 评论 -
JVM学习笔记
JVM机制 JVM包含 类加载子系统,垃圾回收系统GC ,内存三部分。================================= 运行数据区(内存) 运行数据区分为5个组件:方法区,堆区域,堆栈区,PC寄存器,本地方法堆栈。 方法区:类级别的数据存储在这里 。方法区里存的都是类型信息,也就是类的信息,而类的信息 又包括以下内容: 类的全限定名(类的全路径名) ...原创 2018-02-22 15:34:35 · 198 阅读 · 0 评论 -
子类方法调用如何实现
类中方法分为构造方法和普通方法,对于有继承关系的类是如何调用构造方法和普通方法呢?首先子类中调用构造方法和普通方法的实现是不一样的:[构造器]调用初始创建对象时,要先执行父类构造方法,然后执行子类构造方法;[普通方法]调用子类重写父类A方法,对象调用子类重写的父类方法;未重写父类的方法,对象调用时子类直接调用父类的方法。如下是代码实例package test;public cl...原创 2018-10-22 09:43:26 · 2785 阅读 · 0 评论 -
并发同步学习笔记
Synchronized、ReentrantLock的区别?要回答这两者的区别,我们先要搞懂如下概念 要搞明白的概念——可重入锁,定时锁等候tryLock(),中断锁等候lockInterruptibly() ——ReentrantLock的lock机制有2种,忽略中断锁和响应中断锁 ...原创 2018-06-19 15:44:50 · 293 阅读 · 0 评论 -
内存模型JMM
================== 内存模型================== 内存模型(JMM)中主要讲述两点:指令重排和内存屏障。内存指令的执行要符合happens before原则; 内存模型同时还涉及 编译器 和 处理器。指令重排涉及编译器,内存屏障涉及处理器。 为什么要讲述内存模型? 在处理器层面上,内存模型定义了一个充要条件,“让当前的处理器可以看到其...原创 2018-04-26 20:08:57 · 251 阅读 · 0 评论 -
JSONString 和 JSONObject
JSONString 和 JSONObject的使用方法 (1)toJSONString String data=JSON.toJSONString(Object object) API: String com.alibaba.fastjson.JSON.toJSONString(Object object) 把object转化成json格式的字符串(object可以是类Class,也...原创 2018-04-19 20:34:11 · 7536 阅读 · 0 评论 -
Java IO学习总结笔记-总结
Java IO 总结笔记 Java的 IO 大致可以分成 对字节流的输入输出, 对字符流的输入输出。 InputStream和OutputStream主要用于字节流byte的输入输出,二进制文件。 Reader 和 Writer 主要用于字符流的输入输出,文本文件。 流与Reader和Writer在结束使用...转载 2018-04-23 10:14:34 · 287 阅读 · 0 评论 -
Java IO学习总结笔记
Java的 IO 大致可以分成 (1)对字节流的输入输出, (2)对字符流的输入输出。 InputStream和OutputStream主要用于字节流byte的输入输出,二进制文件。 Reader 和 Writer 主要用于字符流的输入输出,文本文...原创 2018-04-19 20:15:00 · 215 阅读 · 0 评论 -
Java安全学习笔记(七)-攻击消息摘要保存的口令
通过消息摘要保存口令的学习,认为保存口令较为安全的原因是,攻击者即使通过攻击得到了口令文件,知道了账号的口令摘要,也难以通过该值反推出口令的值,因而无法登录系统。但是当口令的安全系数比较弱时,也就是说口令的位数很少时,攻击者很容易通过字典式攻击由口令的消息摘要反推出原有口令的值。本实例将演示如何用字典式攻击消息摘要保存的口令。之前我们用MD5生成消息摘要和密文,如果有人获取到消息摘要后,会利用原创 2017-08-29 10:51:21 · 383 阅读 · 0 评论 -
Java安全学习笔记(五)-计算消息摘要
计算消息摘要消息摘要是对原始数据按照一定算法进行计算到计算结果,它主要用于检验原始数据是否被修改过。消息摘要和加密是不同的,从加密的结果可以得到原始数据,从而消息摘要中不可能得到原始数据。本实例演示如何计算消息摘要,并存入指定的文件中。计算消息摘要的技术要点如下:1.字符串如何传入-转变为字节数组2.计算消息摘要-调用digest()方法3.计算结果如何处理-存入指定文件中原创 2017-08-24 10:52:24 · 300 阅读 · 0 评论 -
Java网络编程笔记(三):点对点通信(Socket基于TCP协议)
使用Socket进行通信,需要有客户机和服务器。客户机和服务器可以在同一台机器上,但客户机和服务器处理的信息及信息处理方式是不同的,可以分为客户机程序和服务器程序。本实例介绍实现点对点通信,即一个服务器端监听一个客户端的请求的通信。实现点对点通信的技术要点如下:Socket通常作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过Socket向网络发出请求或者应答网络请原创 2017-08-16 09:48:26 · 5741 阅读 · 1 评论 -
Java构造器分析
大家在才开始学习java的时候应该接触过java构造器,讲真当时学习的时候的根本没把它当回事。什么无参构造器和有参构造器,统统无视,因为对我来说没用嘛。最近在写代码的时候犯难了。 简化后的情况:在一个类A中预读一个文件中的一个文件路径串String,类B对这个String做操作,同时类C在类B要用到路径字符串String。如果类A是直接把字符串String传给了类B,但是我编写的原创 2016-02-13 17:05:10 · 422 阅读 · 0 评论 -
Java线程学习笔记(二)---多线程同步方法
同步方法额可以控制对类成员变量的访问。每个类的实例对象都对应这一把锁,每个同步方法都必须在获得该类实例对象的锁才能执行,方法一旦被执行,就独占该锁,而其他的线程只能等待,知道从该方法返回时才将锁释放。 关键字synchronized用于在多个线程之间同步,当有一个线程进入了有synchronized修饰的方法时,其他线程就不能进入同一个对象使用synchronized来修饰的所有方原创 2016-07-25 17:36:55 · 452 阅读 · 0 评论 -
设计模式-适配器模式
设计模式-适配器模式适配器(Adapter)模式将一个类的接口转换成客户希望的另外一个接口,能够使得原本由于接口不兼容而不能一起工作的那些类可以协同工作了。本实例介绍如何使用适配器模式以及使用的规则。实现适配器模式的技术要点如下:1.目标类是Adapter的父类,Adapter需要继承目标类,以具备目标类提供的功能。2.Adapter是适配器模式中的适配者,它本身并不实现任何功原创 2017-01-30 22:40:06 · 265 阅读 · 0 评论 -
设计模式-抽象工厂模式
工厂模式提供创建对象的接口,是最常用的设计模式。本实例根据工厂模式的分类不同,介绍工厂模式之三的抽象工厂模式的使用方法及使用规则。实现抽象工厂模式的技术要点如下:1.抽象工厂模式和工厂方法模式的区别在于需要创建对象的复杂度上。而且抽象工厂模式是这三种模式中最为抽象、最具一般性的。2.使用抽象工厂模式需要满足以下条件:系统中有多个产品族,二系统一次只可能消费其中一族产品;同属于同一个产品原创 2017-01-30 22:07:30 · 407 阅读 · 0 评论 -
Java安全(四)-输入流的解密
本实例演示针对输入流的解密,将JAVA安全笔记(三)-输入流加密 的加密文件进行解密,并把解密后的结果输入指定的另外一个文件输入流的解密技术要点如下1.密钥生成2.初始化密码器3.获取解密的内容4.创建CipherInputStream对象5.读取输入流6.存入相应文件中源代码package ende;import java.io.FileInpu原创 2017-01-30 17:29:31 · 886 阅读 · 1 评论 -
JAVA安全笔记(三)-输入流加密
编程中会遇到对整个文件进行加密/解密或对网络通信进行加密/解密等。尽管可以先从流中读出字节,然后进行加密/解密,但使用Java中针对流提供的专门的类更加的方便。输入流的加密的技术要点1.密钥生成2.初始化密码器Cipher3.创建输入流4.创建CipherInputStream对象5.读取输入流 源代码package ende原创 2017-01-30 16:43:34 · 2278 阅读 · 1 评论 -
Java安全笔记(二)-创建对称密钥
对称密钥算法:加密和解密使用相同的密钥。Java中已经提供了常用的加密算法。如下程序将展示JAVA中提供的方法创建对称密钥,并通过对象序列化的方式保存在文件中创建对称密钥的技术要点如下1获取密钥生成器 2初始化密钥生成器3密钥生成4密钥以序列化的形式保存在key1.dat中package ende;//创建对称密钥import java.i原创 2017-01-28 23:10:16 · 679 阅读 · 0 评论 -
设计模式-工厂方法模式
工厂模式提供创建对象的接口,是最常用的设计模式。本实例-旅游 根据工厂模式的分类不同,介绍工厂模式之二的工厂方式模式的使用方法及使用规则。实现工厂方法模式的技术要点如下:1.工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式了不同的工厂子类 来分担。2.工厂方法模式由抽象工厂角色、具体工厂原创 2017-02-04 15:42:51 · 286 阅读 · 0 评论 -
Java线程学习笔记(三)---线程同步互斥
该例子运用前面 Java线程学习笔记(二)---多线程同步方法 中提到的同步关键字synchronized来进行线程的同步互斥。synchronized在类的方法声明中使用,可以保证在同一时刻只有一个线程能够进入该方法。例子 本实例模拟银行ATM存取款机,分析一个用户往ATM机中存钱时,另一个用户在另一个地方从中取钱,存在操作前后不一致,程序采用线程同步与非同步方法解决的区别。原创 2016-07-25 19:48:31 · 516 阅读 · 0 评论 -
Java安全学习笔记(一)--凯撒密码
凯撒密码是罗马扩张时期朱丽斯·凯撒创造的,用于加密通过信使传递的作战命令。加密的过程是将字母表中的字母移动一定,从而实现文本的加密。如果将字母表中的字母向右移动2位,则字母A将变为C,字母B将变为D,以此类推,一个明文字符串Hello就被加密成Jgnnq。之后解密,就会返回原字符串。这里,移动的位数2是加密和解密所用的密钥。 凯撒密码的技术要点: 提原创 2015-12-02 17:15:59 · 3088 阅读 · 0 评论 -
Java学习笔记---集合(一)Set
Java为数据结构中的集合定义了一个接口java.util.Set,它有三个实现类分别是HashSet、LinkedHashSet和TreeSet。 Set的特点:不允许元素重复,而不维护元素的顺序。加入的元素必须定义equals()方法来确保对象唯一性; HashSet采用散列函数对元素进行排序,是专门为快速查询而设计的,存入HashSet的对象必须定义hashCode方原创 2015-12-02 11:55:20 · 640 阅读 · 0 评论 -
Java文件IO学习笔记(二)---文件锁定
平常我们打开文件的时候都遇到过“该文件已经被另一个程序占用,打开失败”的情况。这是因为有另一个程序正在编辑该文件,并且不希望编辑过程中其他程序来修改这个文件,因此进行了文件锁定。通过导入包java.nio.channels.FileLock来实现文件的锁定 通过使用FileLock类实现文件锁定。文件锁定可以是独占或者共享。共享锁定可阻止其它并发运行的程序获取重叠的独占锁定,但原创 2015-12-02 19:17:10 · 1151 阅读 · 0 评论 -
线程学习笔记(五)-线程让步和线程守护
在《Java范例大全》这本书上,线程让步和线程守护是分为两个例子来讲的,但是线程让步和线程守护都在讲一个等字,我认为它们两个可以合到一个程序里面来看现象。另外这本书上关于守护线程的例子有问题。(1)线程让步(yield)让当前运行的线程放弃其所占用的CPU时间片,以便让其他线程运行,用线程让步的目的是让线程适当地轮转,但并不能保证达到此效果。因为即使当前线程放弃时间片,还有可能再次被Java虚原创 2017-08-10 15:37:53 · 448 阅读 · 0 评论 -
Java线程学习笔记(四)-线程沉睡,唤醒,连接
线程沉睡(sleep)并不会让线程释放它所持有的同步锁,而且在这期间也不会阻碍其他线程的运行。唤醒(interrupt)可以将沉睡或阻塞的线程唤醒。线程沉睡:线程沉睡可以使当前线程沉睡一段时间,在这段时间内不会有时间片分配给线程。直到过完这段时间,线程又重新运行。线程唤醒:线程唤醒可以使得执行了sleep操作的线程或执行了wait操作或者join操作的线程唤醒。线程沉睡要指定沉睡的时间,如原创 2017-08-10 15:28:58 · 6360 阅读 · 0 评论