java进阶
文章平均质量分 67
19年,重新开始写
求学之路,泛结良师,广交益友
展开
-
《Java深入解析-渗透java本质的36个话题》总结
浮点类型的种种悬疑浮点类型只是近似的存储,这很显而易见,因为在计算机内部是使用二进制来存储数值的,而对于0.3333之类的奇数小数就没办法存储,因此采用的是一种近似值的方式进行存储的,所以就会造成一个误差:下面代码将输出false,因为对于浮点数运算会存在误差:double x = 0.1, y = 0.2, z = 0.3;System.out.println(x+y==z);//真...原创 2018-05-19 12:42:59 · 1079 阅读 · 0 评论 -
java设计模式总结三:单例模式
单例模式定义 单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例 单例模式的实现方式:懒汉式实现,不过多线程下不安全 public class Singleton { private static Singleton instance;原创 2017-10-06 14:29:09 · 390 阅读 · 0 评论 -
java设计模式总结二:工厂模式
工厂模式定义 工厂模式用于实现工厂方法代替new来创建实例化对象,简单的说就是由一个工厂类根据传入的参数来选择创建哪一种的产品类 在任何需要使用多态的原理根据不同的信息生成不同的对象的场景下都可以使用工厂模式工厂模式四个角色: 工厂类角色:是具体产品类角色直接调用者。 抽象产品角色:接口或抽象类,负责具体产品角色的定义,及与客户端的交互。 具体产品角色:原创 2017-10-06 14:32:45 · 427 阅读 · 0 评论 -
java设计模式总结一:简介和原则
设计模式分类设计模式分为三大类:创建型模式、结构型模式和行为型模式创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。其实还有两类转载 2017-10-28 00:06:19 · 361 阅读 · 0 评论 -
JVM内存模型介绍
java内存分配 JVM定义了若干个程序执行期间使用的数据区域。这个区域里的一些数据在JVM启动的时候创建,在JVM退出的时候销毁。而其他的数据依赖于每一个线程,在线程创建时创建,在线程退出时销毁。 java按照内存使用区域可以分为四个部分:堆、栈、方法区和程序计数器;其中栈又可以分为两大部分:java虚拟机栈和本地方法栈;下面我将通过自己的学习与别人总结的参考见解来介绍下jvm原创 2017-10-05 17:08:46 · 455 阅读 · 0 评论 -
java并发程序设计总结七:jdk的并发容器
线程安全的HashMap:Collections.synchronizedMap()Collections工具类中提供了一系列synchronizedXxx方法用于包装对应的集合对象成线程安全的。这里就介绍下HashMap:public static <K,V>Map<K,V> synchronizedMap(Map<K,V> m);该方法会生成一个名为synchronizedMap的Map,它使用翻译 2017-10-27 19:46:29 · 499 阅读 · 0 评论 -
java并发程序设计总结六:线程池
多线程的软件设计方法确实可以最大限度的发挥现代多核处理器的计算能力,但是如果不加控制和管理的随意使用创建线程,对系统的性能反而会产生不利的影响。不适用线程池的线程优化可以使用如下方式来创建线程,他会在run结束之后,自动回收线程资源:new Thread(new Runnable(){ public void run(){ // do something... }}翻译 2017-10-23 20:28:23 · 348 阅读 · 0 评论 -
二叉树的前序遍历的递归实现与非递归实现
概念 二叉树的前序遍历可以称为前根序遍历,遍历的顺序依次为:每个(子)树的根节点->左子节点->右子节点 举例说明 该图的前序遍历的结果为:ABDECF 前序遍历非递归实现思路步骤讲解: 对于任意结点p(当前遍历的结点): 1.先输出该节点,然后存放到栈中,执行:p = p->left;并判断p是否为空 2.p不为空(即之前结点的原创 2017-10-10 17:23:03 · 1110 阅读 · 0 评论 -
java高并发程序设计总结一:走进并行世界
2014年底,就在大家都认为并行计算必然成为未来的大趋势时,在Avoiding ping pong论坛上,Linus Torvalds提出了一个截然不同的观点:“忘掉那该死的并行吧!”(原文:Give it up. The whole”parallel computing is the futrue” is a bunch of crock)忘掉那该死的并行对于并行计算,Linus提出两个特例,那就翻译 2017-10-19 14:49:31 · 448 阅读 · 0 评论 -
java的override和overload详解
在详解override和overload前需要对多态做一个详细的了解什么是多态?多态的教科书标准定义:允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。其实可以借助于生活中的常见的一种多态现象来解释多态:比方说按下 F1 键这个动作,如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Wi原创 2017-10-18 01:02:42 · 1191 阅读 · 0 评论 -
牛客网日常刷题错题汇总2017-09-08
<方法重载> 同一个类中的方法的重载:方向名相同,参数列表不同;而方法的返回值类型和修饰符都是没有关系的;如下程序的输出结果:public class IfTest{ public static void main(string[]args){ int x=3; int y=1; if(x=y) System.out.p原创 2017-09-09 02:00:24 · 425 阅读 · 0 评论 -
牛客网日常刷题错题汇总2017-09-07
<泛型经典>class A {}class B extends A {}class C extends A {}class D extends B {}Which four statements are true ?A.The type List<A>is assignable to List.B.The type List<B>is assignable to List<A>.C.Th原创 2017-09-07 09:59:57 · 1175 阅读 · 0 评论 -
牛客网日常刷题错题汇总2017-09-06
<经典>关于ArrayList扩容的讲解: ArrayList的构造器总共有三个:ArrayList()无参构造器构造一个初始容量为10的空列表,每次扩容大小为1.5倍; ArrayList(Collection ArrayList(int initialCapacity)构造一个具有指定初始容量的空容量;这种方式是指定了创建的容量大小,没有扩充;<经典>关于HashMap和HashTa原创 2017-09-06 02:06:42 · 539 阅读 · 0 评论 -
java高并发程序设计总结二:java并行程序基础
进程和线程的关系进程的概念:进程是计算机中的程序关于某数据集合的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。进程和线程的关系:简单的来说,进程就是线程的容器,而线程就是轻量级进程,是程序执行的最小单位;使用多线程而不是多进程来进行并发程序的设计,是因为线程间的切换和调度的成本要远远小于进程线程的创建两种基本方式:继承Thread类和实现Runnable接口,下面通过代码来翻译 2017-10-22 00:23:39 · 680 阅读 · 0 评论 -
java高并发程序设计总结三:JDK并发包之ReentrantLock重入锁
为了更好的支持并发程序,jdk内部提供了大量实用的API和框架,重入锁就是一种对同步的扩展ReentrantLock起源在1.5的时候,synchronized关键的性能不是很好,这也是concurrent并发包出现的一种潜在原因,而新出现的ReentrantLock重入锁的性能那时比synchronized好太多,也提供了更加灵活、细粒度的同步操作。(在jdk1.6开始,jdk在synchroni翻译 2017-10-22 13:19:10 · 1048 阅读 · 0 评论 -
IntelliJ初使用:helloworld总结
相较于Eclipse而言IntelliJ的优势在哪里?可以阅读这篇文章:我们为何放弃Eclipse,投奔IntelliJ IDEAIntelliJ下载安装在IntelliJ官网下载操作系统对应的应用程序文件(我的是Windows,所以就Windows进行介绍了)打开exe文件进行步骤安装,这里分享一篇IntelliJ安装教程IntelliJ注册码IntelliJ注册码网上有很多人发布了一些,我用的一转载 2017-11-03 11:49:41 · 493 阅读 · 0 评论 -
java序列化与反序列化
概念java序列化是将对象转换成字节序列的过程;而java反序列化是将字节序列转换成对象的过程;由来我们都知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,比如文本、图片、音频、视频等,而这些数据都是以二进制的形式进行发送的,那么能否实现进程间的对象传送吗?这个时候就需要对象的序列化和反序列化了:发送方需要使用序列化将对象转换成字节序列进行发送,而接收方需要使用反序列化将接收到的字节序列转原创 2017-10-16 21:42:46 · 360 阅读 · 0 评论 -
java设计模式总结十:享元模式
享元模式定义享元模式(Flyweight Pattern),又称轻量级模式(这也是其英文名为FlyWeight的原因),通过共享技术有效地实现了大量细粒度对象的复用。享元模式简单的说就是共享,举个例子,有十个人需要用笔,这十个人不是同时需要使用,这时候我们没有必要拿出十只笔,可以从1开始依次拿给他们,当不够的时候再拿,这里用到的就是享元模式的概念:共享现在,面向对象技术虽然可以很好的解决一些灵活性问转载 2017-11-02 16:53:12 · 688 阅读 · 0 评论 -
java设计模式总结九:合成模式
合成模式定义合成模式,也叫树形模式,就是把部分和整体的关系通过树形结构来表示,使得客户端对单个对象和组合对象的使用具有一致性合成模式也是继承的另一种替代方法合成模式组成结构合成模式主要由三个部分组成:抽象类、叶子类和父类1.抽象类:这是一个抽象角色,它给参加组合的对象定义出公共的接口以及默认的行为,组合对象的名义父类可以通过它来管理所有的子对象,而不需要通过继承2.叶子类:名义上的子类,通过实现接口原创 2017-11-02 16:05:50 · 782 阅读 · 0 评论 -
java设计模式总结八:代理模式
代理模式定义代理模式就是给一个对象提供一个代理对象,由这个代理对象控制对原对象的引用,使代理类在客户端和原对象之间起到一个代理的作用在不适用代理模式的情况下我们将两个类进行关联时,就需要在一个类的代码中直接调用另一个类,后续如果需要进行特殊的处理,就需要直接在该类中修改代码,这违背了设计模式的开闭原则,并且当很多类需要进行相同的特殊处理的时候,每一个类都必须编写相同的处理代码,无法实现代码的复用而在原创 2017-11-02 13:29:44 · 499 阅读 · 0 评论 -
java设计模式总结七:门面模式
门面模式定义门面模式也称外观模式,门面模式实现了子模块和客户端之间的松耦合关系,从而屏蔽了子模块内部的实现细节。只是将客户端需要的接口提供给客户,这样一来子模块组件如果发生变化,修改接口就可以了,不会影响到客户端的使用。简单来说就是把一系列复杂的流程封装成一个接口供给客户端更简单的使用门面模式三种角色子系统角色,客户角色和门面角色, 其中门面角色可以看成是一个中间件,用于实现客户端间接调用子系统提供原创 2017-11-01 18:29:43 · 721 阅读 · 0 评论 -
java设计模式总结六:适配器模式
适配器模式定义举一个例子简单的理解:当我们的电脑外接一个vga接口的显示屏时,如果我们的电脑本身没有vga接口,只有hdmi,这时候就需要使用一个转接口将vga转成hdmi接口,从而让电脑连接。这里的转接口就是一个适配器,解决的办法就是一种适配器模式在程序开发中,当一个系统需要使用另一个系统提供的外部接口,而这个外部接口与目前系统使用的不兼容时,就需要使用适配器模式。适配器模式就是将一个系统的接口转原创 2017-11-01 13:29:22 · 602 阅读 · 0 评论 -
java设计模式总结五:创建者模式
创建者模式定义创建者模式就是将一个对象的创建和表示分离,使得同样的构建过程可以有不同的表示,而且客户端不需要知道对象的构建细节在书中第二条提到:遇到多个构造器参数时考虑使用构建器,其实这里的构建器说的就是创建者模式创建者模式组成角色1.Builder:为创建一个产品对象的各个部件指定抽象接口public interface HTMLBuilder{ void buildHead();原创 2017-11-01 11:32:08 · 661 阅读 · 0 评论 -
java设计模式总结四:原型模式
原型模式定义用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。它属于创建型模式。原型模式主要用于实现对象的复制原型模式简单的说就是:通过一个原型对象来表明要创建的对象类型,然后通过复制这个原型对象的方法来创建同类型的对象原型模式的使用场景假设对于一个产品的再生产,每次都生产同样的产品,可以使用如下代码实现://产品类public class Product{ private i原创 2017-11-01 09:59:28 · 599 阅读 · 0 评论 -
java高并发程序设计总结五:jdk并发包其他同步控制工具类:ReadWriteLock/CountDownLatch/CyclicBarrier/LockSupport
读写锁ReadWriteLock之前的博客介绍了synchronized和重入锁ReentrantLock都可以实现线程同步,这两种方式确实实现了线程同步,保证了同时只能有一个线程能获得锁资源。不过他们有一个缺点:多个线程对数据进行读取操作也是需要进行等待的。而这实际上是没必要的,因为读操作不会对数据造成污染。ReadWriteLock的出现优化了这一个缺点:多个线程读不会阻塞,而读写和写写会进行阻翻译 2017-10-23 13:40:27 · 345 阅读 · 0 评论 -
git常用命令集锦
git常用命令大全git init:将任何目录转换成git版本库(同时会自动创建一个隐藏的.git文件夹,用于保存所有的修订信息)git add file:添加新创建的文件file到版本库中(如果新创建的文件很多,可以使用使用通配符形式:git add .)git status:查看处于中间状态的文件列表,它会明确展示出哪些文件是暂存的git log:查看版本更改的...原创 2017-10-31 09:21:14 · 480 阅读 · 0 评论 -
java高并发程序设计总结四:JDK并发包之信号量Semaphore
概念信号量是对锁的一种扩展。不管是对于synchronized还是对于ReentrantLock锁来说,一次都只允许一个线程获取锁资源,其余的线程都只能处于等待状态。而信号量可以指定多个线程同时访问某一个资源,包括锁资源Semaphore主要提供了一下两个构造函数public Semaphore(int permits);初始化信号量并指定能同时访问的线程数量public Semaphore(int翻译 2017-10-23 10:41:27 · 813 阅读 · 0 评论 -
牛客网日常刷题错题汇总2017-09-04
如下代码输出结果为:public class Base{ private String basename = "base"; Base(){ callName(); } public void callName(){ System.out.println(basename); }}public class Sub extends Base{ private原创 2017-09-04 01:20:37 · 647 阅读 · 0 评论 -
java8新特性
接口默认方法java78允许我们为接口提供一个默认的非抽象方法,只需要使用default关键字修饰该方法即可,这种方法也叫扩展方法,该方法的使用与一般的类使用普通方法是一样的,区别仅仅是他是接口的方法public interface inter{ void tt(); default void test(){ System.out.println("hello def原创 2017-08-14 11:47:46 · 266 阅读 · 0 评论 -
String、StringBuffer、StringBuilder的区别
可变性String:查看源码得知,String类的声明是:public final最终类,因此String类是不可变类,有如下代码:`String str = “a”; str += “b”;`其执行顺序为:首先定义一个String对象并进行初始化,指向一个地址,该地址的值为a,然后进行str+=”b”操作后等于将str的地址改变了,重新指向了另一个地址,该地址的值为”ab”,而原来的”a”并没有改原创 2017-05-30 00:10:10 · 245 阅读 · 0 评论 -
Arrays操作数组
使用Arrays类来操作数组,可以简化很多操作1.数组自然排序public void arraySort(){ int arr[] = new int[]{21,12,32,45}; Arrays.sort(arr); System.out.println("排序后的数组为:"); for(int val: arr){ System.out.print(原创 2017-05-27 15:47:51 · 344 阅读 · 0 评论 -
接口中的嵌套实现代码
在接口中,其方法全部都是抽象方法,那如何在里面添加实现代码呢1.接口jkonepublic interface jkone{ public void dosomething();}2.接口jktwopublic interface jktwo{ public static final jkone one = new jkone(){ public void do原创 2017-05-29 01:21:28 · 419 阅读 · 0 评论 -
执行脚本代码的java引擎--测试代码
public class JSEngineTest{ public static void main(String[] args){ //获得js的一个执行引擎 ScriptEngine js = new ScriptEngineManager().getEngineByName("javascript"); //建立上下文变量并植入相关参数原创 2017-05-29 01:03:10 · 534 阅读 · 0 评论 -
类实现Serializable接口进行序列化和反序列化操作
目的类实现Serializable接口的目的主要是为了进行可持久化操作,将临时存储在内存块中的数据转换成可传输数据SerialVersionUID属性当我们创建A类的对象a并进行序列化传输时,如果此时我们修改了A类,增加了某些新的属性,这时候如果不对其进行判断而进行反序列化的话,将会导致运行时异常,两者类型不匹配。因此,这里使用SerialVersionUTD属性,该属性用来唯一标识一个类的版本Se原创 2017-05-28 01:54:07 · 6211 阅读 · 0 评论 -
变量自增的陷阱
有如下代码public void test(){ int count = 1; count = count++; System.out.println("count的值为->"+count);}输出结果为:count的值为1原理: count++细分为三个步骤: int temp = count; temp = temp+1; //相关操作之后原创 2017-05-27 23:27:38 · 511 阅读 · 0 评论 -
java中的初始化顺序
类的初始化总共分为下面几种1.定义变量时的初始化2.初始化块创建类的对象时,定义变量并赋初始值之后,最先使用初始化块进行初始化,初始化块分为一般初始化块和静态初始化块 一般初始化块:形如{},一般初始化块里可以初始化普通成员变量,也可以初始化类成员变量, 静态初始化块:形如static{},静态初始化块只可以初始化静态成员变量. 如果同时存在两种初始化块,则静态初始化块最先进原创 2017-05-27 16:13:18 · 360 阅读 · 0 评论 -
javamail之实现注册激活邮件
需要的jar包1.mysql驱动包 2.mail.jar包SMTP和POP3协议概述SMTP协议称为简单邮件传输协议,是一组用于从原地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP的协议簇,SMTP是负责邮件服务器之间的寄信的通信协定 POP3协议称为邮局协议版本3,也是TCP/IP协议簇的一员,基于POP3协议的服务器是用来接收信件的。每个Email地址一般原创 2017-04-23 17:14:17 · 3500 阅读 · 5 评论 -
javamail之本地测试玩mail客户端和服务器
需求软件下载1.下载易游邮箱服务器,下载网址链接:http://download.csdn.net/detail/ahuangtaoa/5282703 2.下载foxmail服务器,下载网址链接:http://rj.baidu.com/soft/detail/14579.html?aldeyou邮箱服务器配置上图解释: foxmail邮箱客户端配置 完成邮箱客户端和服务器的两个配置原创 2017-04-23 10:42:54 · 1716 阅读 · 0 评论 -
java爬虫入门之访微企点首页源代码
本次爬虫实现采用java.net.URL及相关包实现,贴上代码:public class CodeGrab{ public static void main(String[] args)throws IOException{ String uri = "http://www.wqdian.com/"; String result = getCode(uri);转载 2017-04-12 12:41:33 · 1353 阅读 · 0 评论 -
使用java仿Servlet生成验证码
实现原理:使用BufferedImage对象的Graphics来进行绘制,然后输出成一张图片进行保存实现代码及详解:public class validateCode{ private static Random rand = new Random(); public static void main(String[] args){ int val1 = rand.ne原创 2017-04-10 13:31:48 · 372 阅读 · 0 评论