
java
文章平均质量分 69
请叫我王老魔
最近重新温习java
展开
-
github 入门,如何上传本地项目到github托管
欢迎使用Markdown编辑器写博客Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl + Q插入链接 Ctrl + L插入代码 Ctrl + K插入图片原创 2017-11-06 19:12:39 · 421 阅读 · 0 评论 -
Java 8 的新特性
(最重要的是接口的扩展 和 支持Lambda表达式)第一: 关于接口 interface,新增了:可以在接口内实现非抽象的方法,只需要在方法前面加上default关键字, 另外在接口内也可以添加static 方法。interface Formula { double calculate(int a); // 原来接口内只允许上面的抽象方法,现在可以增加下面的具体的方法实现,现在接口就原创 2017-03-20 11:30:18 · 376 阅读 · 0 评论 -
多线程同步 synchronized
几个重要的概念: 并行:多个cpu实例或者多台机器同时执行一段处理逻辑,是真正的同时。 并发:通过cpu调度算法,让用户看上去同时执行,实际上从cpu操作层面不是真正的同时。让一段程序交替进行,并发往往在场景中有公用的资源,那么针对这个公用的资源往往产生瓶颈,我们会用TPS或者QPS来反应这个系统的处理能力。 线程安全:经常用来描绘一段代码。指在并发的情况之下,该代码经过多线程使用,线程的调度原创 2017-03-12 22:01:58 · 528 阅读 · 0 评论 -
代理模式详解
代理模式的作用: 为其他对象提供了一个代理以控制对这个对象的访问 在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理模式可以在客户端和目标对象之间起到中介的作用。代理模式涉及到的角色: 抽象角色: 声明真实对象和代理对象的共同接口代理角色: 代理对象内部含有对真实对象的引用,从而可以操作真实对象; 同时 代理对象提供与真实对象相同的接口以便在任何时候都能代替真实对象; 同时,代原创 2017-02-26 21:53:35 · 512 阅读 · 1 评论 -
java 的 ClassLoader 类加载机制详解
一个程序要运行,需要经过一个编译执行的过程: Java的编译程序就是将Java源程序 .java 文件 编译为JVM可执行代码的字节码文件 .calss 。Java编译器不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址。这样就有效的保证了Java的可移植性和安全性。原创 2017-03-21 11:28:30 · 4415 阅读 · 2 评论 -
AJAX (Asynchronous JavaScript and XML)
Ajax工作原理 在写这篇文章之前,曾经写过一篇关于AJAX技术的随笔,不过涉及到的方面很窄,对AJAX技术的背景、原理、优缺点等各个方面都很少涉及null。这次写这篇文章的背景是因为公司需要对内部程序员做一个培训。项目经理找到了我,并且征询我培训的主题,考虑到之前Javascript、CSS等WEB开发技术都已经讲解过了,所以决定针对AJAX这一块做一个比较系统的培训,所以这篇文章实际上是一个培转载 2017-03-07 21:10:03 · 626 阅读 · 0 评论 -
深拷贝(deep clone)和浅拷贝(shallow copy)
这个又叫浅复制和深复制。 其相同点和区别: 相同点: 浅复制和深复制都是通过复制创建了一个新的对象,也就是 x.clone() != x 浅复制和深复制的对象所属的类是一致的,也就是 x.clone().getClass() == x.getClass() 浅复制和深复制的对象在某些情况下, 也就是从内容角度来说,它所包含的内容是一致的 x.clone().equals(x)不同点:原创 2017-03-15 10:54:31 · 1030 阅读 · 0 评论 -
序列化与反序列化
概念的理解: 对象序列化: 将对象写入一个字节流保存起来的过程,稍后你就可以运用序列化过程存储这些对象到一个固定的存储区域如文件, 这种机制叫做对象序列化。 反序列化: 跟序列化正好相反,从一个固定区域如文件读取回内存的过程。 反序列化的时候不会调用对象的任何构造方法,仅仅根据所保存的对象的状态信息在内存中重新构建对象。Java的序列化和反序列化工具被设计出来,很多情况下,对象的存储和回复工作原创 2017-03-06 18:08:00 · 320 阅读 · 0 评论 -
UDP中的connect方法 和TCP的connect方法详解
上一篇文章中,我发现了UDP也是有这connect方法的,这使我非常不理解,下面为大家讲解一下这个connect方法。 我们知道UDP是无连接的,它可以给多个IP发送数据包,包括广播地址或者多播通信的实现,而这些是TCP/IP无法实现的。 但是UDP提供了这样的一个connect()方法,它有两种使用方式,当使用了这个方法之后,那么就限定了这个socket的使用范围: 只允许从这个指定的Sock原创 2017-03-19 21:51:13 · 7362 阅读 · 1 评论 -
TCP和UDP 在java上通信上的实现
TCP/IP 实现通信图示: 服务器端: ServerSocket 第一步: 服务器端启动一个ServerSocket, 绑定到特定的端口号上,并对该端口号进行监听,等待用户的请求ServerSocket serverSocket = new ServerSocket(5566);第二步: 调用accept() 方法,监听端口号, 如果没有用户发送请求连接,这个accept方法是会一致阻塞的,原创 2017-03-19 21:15:01 · 3848 阅读 · 0 评论 -
字符char 输入输出流 和 NIO
字符输入和输出很类似,只不过字符类处理的是字符,字符流以char为最基本的单位,而字节流以byte为最基本的单位。字符流 Reader 和 Writer 两个抽象类,字符输入和输出流的类都是继承自这两个类。 Java使用unicode来表示字符和字符串, 一个字符char 用两个字节表示,即一个字符占 16 位。 Java中一个字符 可以表示一个汉字。OutputStreamWriter类: 用原创 2017-03-05 22:20:21 · 627 阅读 · 0 评论 -
字节 输入输出流 byte
输入和输出是相对于程序的: 流的分类: 第一: 输入流: 数据从外部流入写的程序 输出流: 数据从程序流到外面第二: 从流结构上:其实底层都是以字节流来实现的。 **字节流: 字符流**:在字节流的基础上做了封装,相当于直接操作字符串一样,简化操作。字节流**byte Stream的输入和输出基础是 **InputStream 和 OutoutStream这两个抽象类 字节的输入和原创 2017-03-03 22:14:27 · 12573 阅读 · 0 评论 -
Java 中的反射机制
首先先讲解一下动态语言和非动态语言: 动态语言:在程序运行期间,允许改变程序结构或者变量类型 例如:Perl, Python,Ruby 与之相对的是静态语言,C++,Java,C#在动态语言中允许 var a=1; a=”aaaa”; a=false;反射机制(Reflection)基本概念java 的反射机制:动态获取类的信息以及动态调用对象的方法。 对于任意一个对象都够知道这个原创 2017-02-26 18:56:33 · 266 阅读 · 0 评论 -
枚举类型 和 可变参数
定义可变参数: 一定要放在所有参数的最后面, sum(不可变类型,可变类型int… nums),同时可变参数最多只能有一个 可以一个个参数传进去,也可以以数组的方式传进去。 格式 type … name// 这样定义意思是sum可以接收多个整型的的变量public static int sum(int... nums){ int summ = 0; // 这样来使用 for原创 2017-02-26 11:08:17 · 2406 阅读 · 0 评论 -
装饰模式(包装模式)
装饰模式: 是以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。装饰模式是以对客户透明的方式动态的给一个对象附加上更多的责任,装饰模式可以在不增加任何子类的情况下将对象的功能加以扩展。 使用装饰模式,我们没有对类进行修改就实现了为该类的对象添加了新的功能,当然我们也可以通过继承来建立一个子类实现我们添加功能的目的,但是这样一来就要写好多的子类,而且这些子类仅有少许微小的差别,不利于后续的原创 2017-03-05 16:52:09 · 456 阅读 · 0 评论 -
Java多线程之BlockingQueue深入分析
转载自: http://www.2cto.com/kf/201212/175028.html 一、概述: BlockingQueue作为线程容器,可以为线程同步提供有力的保障。二、BlockingQueue定义的常用方法 1.BlockingQueue定义的常用方法如下:抛出异常 特殊值 阻塞 超时 插入 add(e) offer(e) put(e) offer(e, time, unit)转载 2017-03-14 19:27:03 · 525 阅读 · 0 评论 -
高级多线程控制类
在讲解高级多线程控制类之前,我们需要把前面的一点知识再补上:并且对比一下几种方法:yield() 方法: 当前正在执行的线程(Running 状态),如果调用了yield方法,代表着它自愿的放弃了对CPU资源的占用,转化为runnable状态。 sleep(Time) : 线程休眠一段时间,但是休眠过程中仍然保持着对对象锁的占用 wait : 线程等待,会释放掉对对象锁的占用 join() :原创 2017-03-14 21:59:48 · 1893 阅读 · 1 评论 -
几种常见的java开源库,及其功能介绍
1、Commons Math 是Apache上一个轻量级自容器的数学和统计计算方法包,包含大多数常用的数值算法。2、LWJGL(Lightweight Java Game Library)可以帮助Java程序员开发有着商业性质的游戏。LWJGL为开发者提供简单易用的API来访问OpenGL (Open Graphics Library)和OpenAL (Open Audio Library),同样也转载 2017-03-26 21:01:28 · 4320 阅读 · 0 评论 -
Java中的值传递和引用传递
理解Java中的值传递和引用传递,形参和实参1. 两大数据类型以及特殊的String8种基本数据类型 int char byte boolean long short float double 对象类型 1、8种基本数据类型的包装类型 2、数组等 3、定义的对象特殊: String2. 两大引用类型基本类型对象的引用 这两者是有区别的 基本类型 对象的引用 声明定义的时原创 2017-11-29 16:04:23 · 481 阅读 · 0 评论 -
设计模式的六大原则
本文转载自: http://www.cnblogs.com/dolphin0520/p/3919839.html第一: 单一职责原则一个类只负责一个功能领域中的相应职责,即一个类只负责一个功能 单一职责原则是实现高内聚、低耦合的指导方针,它是最简单但又最难运用的原则,,一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小,而且一个类承担的职责过多,就相当于将这些职责耦合在一起转载 2017-09-19 22:15:43 · 398 阅读 · 0 评论 -
缓存淘汰算法 LFU and LRU
本博客转载自: http://blog.youkuaiyun.com/jake_li/article/details/50659868http://flychao88.iteye.com/blog/1977653一. LFU(Least Frequently Used)1.1. 原理 淘汰一定时期内最少使用的数据 LFU(Least Frequently Used)算法根据数据的历史访问频率来淘汰数据,转载 2017-09-23 16:43:12 · 1507 阅读 · 0 评论 -
ConcurrentHashMap总结
本文转载自: https://my.oschina.net/hosee/blog/675884 ConcurrentHashMap总结 原文出处: Hosee并发编程实践中,ConcurrentHashMap是一个经常被使用的数据结构,相比于Hashtable以及Collections.synchronizedMap转载 2017-09-04 21:28:04 · 519 阅读 · 0 评论 -
多线程中的ThreadLocal 详解
要了解ThreadLocal,首先搞清楚ThreadLocal 是什么?是用来解决什么问题的?ThreadLocal 是线程的局部变量, 是每一个线程所单独持有的,其他线程不能对其进行访问, 通常是类中的 private static 字段,是对该字段初始值的一个拷贝,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联我们知道有时候一个对象的变量会被多个线程所访问,这时就会有线程安全原创 2017-05-19 16:49:42 · 30491 阅读 · 7 评论 -
JVM 调优
1.、堆大小的设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。 典型设置: java -Xmx3550m -Xms3550转载 2017-04-18 16:12:07 · 372 阅读 · 0 评论 -
线程类Thread详解和线程的几种状态,守护线程
Thread类也是实现了Runnable接口的,它的run方法就是因此而来的class Thread implements Runnable {}Thread几个比较重要的构造方法: Thread() //创建一个线程 Thread(Runnable target) //将一个实现了Runnable接口的类的对象传进来 Thread(String name) // 为线程传进名字为什么必须要通原创 2017-03-08 22:03:03 · 1926 阅读 · 0 评论 -
JVM垃圾回收
垃圾回收的主体java的垃圾回收主要针对的是 堆上的内存空间(堆上的对象)(最主要的) 以及 方法区中的常量池和无用的类的回收(在经常动态加载类的场景中需要进行回收处理)堆上的空间回收率比较高,一般能回收70-90%的空间,而方法区中的回收效率很低,常量池的回收比较简单,但是一个无用类要被回收则必须满足下面的条件: 该类的所有实例对象已经被回收 加载该类的classloader已经被回收 该原创 2017-04-18 10:55:32 · 421 阅读 · 0 评论 -
java中的JDBC详解 附带实现配置文件访问数据库
JDBC 是Java操作数据库的规范,它实际上定义了一组标准的数据库的接口,为了实现通过java操作数据库,必须实现这些接口,不同的数据库厂商都提供了对JDBC接口的实现,这些具体的实现被打包成一个jar包(也就是数据库驱动),供我们在开发的时候直接使用。 JDBC API 中的主要接口: 第一: Driver接口是所有JDBC程序必须实现的接口,该接口专门提供给数据库厂商使用,定义了驱动的样式原创 2017-04-10 14:54:07 · 13221 阅读 · 1 评论 -
多线程同步-线程之间通信:wait notify 另外还有interrupt,join方法
线程之间的相互作用:线程之间通信 (生产者-消费者问题:可以看成两个线程,生产者一个线程,消费者一个线程,生产者这生产一个东西告诉消费者可以消费了,消费者消费完这个东西就通知生产者可以生产了,绝对不允许生产者连续生产而无消费者消费的情况) (哲学家就餐问题: 一群哲学家围着一个圆桌吃饭,吃饭需要筷子,但是筷子并不够,并不能每个人分到一双筷子,筷子的分布情况是这样的: 哲学家的左手和右手边分别原创 2017-03-14 10:45:51 · 850 阅读 · 0 评论 -
java 的JVM内存详解和内存溢出异常
说明更多关于JAVA虚拟机的知识,大家可以参考 《深入理解java虚拟机》 –周志明著 一书,下面的内容大部分都是总结自这本书中的内容。java的内存管理对于java 和C++来说,有这这样一个巨大的差别,这个差别就是由内存动态分配和垃圾回收技术所围成的高墙,墙里面的人想出来,墙外面的人想进去。对于java来说,JVM提供了自动管理内存机制,在该机制下,程序员不用向C或者C++一样再去写 delet原创 2017-04-17 20:55:27 · 1093 阅读 · 0 评论 -
Java 网络概述 和 TCP 和 UDP
网络7层模型:OSI 标准 open system interconnection 应用层所使用的协议: 远程登陆协议:Telnet 文件传输协议: FTP 超文本传输协议: HTTP 域名服务DNS 简单邮件传输协议: SMTP 邮局协议:POP3传输层协议: TCP : 面向连接的可靠的传输协议 UDP : 是无连接的,不可靠的传输协议网络层协议: 网际协议 IP 互联原创 2017-03-16 08:33:43 · 383 阅读 · 0 评论 -
数据库连接池简介和 C3P0的JDBC配置
前面一节我们介绍了如何利用jdbc连接数据库,已经实现了数据库的连接,但是在实际的项目开发中,可以发现基本上都使用了数据库连接池技术,为什么要使用数据库连接池呢?根源在于对数据库连接的低效管理 答: 普通的JDBC数据库连接,用户请求一次查询的时候就会向数据库发起一次连接,执行完后就断开连接,这样的方式会消耗大量的资源和时间,数据库的连接资源并没有得到很好的重复利用。若是同时有几百人甚至几千人在线原创 2017-04-12 11:27:51 · 4194 阅读 · 2 评论 -
java中 equals 方法详解 和 String 详解
第一个重要知识点 == 和equals 方法的区别,很重要的一点为, == 永远比较的是地址, 而equals方法在 String类型 和 八种原生数据类型的包装类型如Integer等,的里面是比较的内容。而对于普通的对象,equals方法也比较的是 地址。第二个重要知识点 new的原生数据类型,通过String a=“”aaa“”定义的 变量是放在栈中的,而 new出来的对象,和a=ne原创 2017-02-19 15:46:14 · 1302 阅读 · 0 评论 -
线程概念详解(Thread)
线程和进程的区别: 一个进程内可以有多个线程,线程是比进程更小的单位 1、 进程是系统分配资源的基本单位,线程是CPU调度的基本单位,进程是程序的一次执行,线程是CPU调度的一次执行 2、进程之间是相互独立的,每个进程拥有自己的一块自身内存区域(进程间的通信是需要解决的问题),而多个线程之间是共享一块内存区域和一组资源的,有可能相互影响(因此会产生多个线程同时访问某一块数据的时候会导致数据不一致原创 2017-03-07 21:08:38 · 2044 阅读 · 0 评论 -
三种遍历:for,for-Each,Iterator
for-Each循环: 增强的for循环,写起来比较简洁,其实跟普通的for循环性能上没啥区别所以到现在遍历的方式有三种: for :当需要数组的下标信息时用它 for-Each : Iterator // 对于一位数组的遍历 int[] array={1,2,3,4,5}; // for(对象的类型type element :array)原创 2017-02-25 20:54:33 · 457 阅读 · 0 评论 -
java中的Iterator 和TreeSet
HashSet 是没有提供get方法的,但是我们在使用Set的时候要获取对象,因此在HashSet中提供了 Iterator 来实现遍历迭代器的工作原理: 主要有三个函数:可以认为iter是箭头所在地方, next(), 指向元素 hasNext(), 判断还有对象吗 remove(), 移除对象 Iterator iter = hashSet.iterator()原创 2017-02-22 09:04:26 · 1387 阅读 · 0 评论 -
HashSet 介绍, equals() 和hashcode()方法介绍
第一点,Set集合中是不允许有重复元素的, 第二点,Set集合中是无顺序的 第三点: * 为什么 add方法在添加String类型和普通的对象Person的时候结果不太一样,在它的帮助文档中是这样解释的 * //Adds the specified element to this set if it is not already present. More原创 2017-02-21 15:59:43 · 3163 阅读 · 0 评论 -
LinkedList 实现栈与队列,比较简单
import java.util.LinkedList;public class LinkedListStackQueue { public static void main(String[] args) { LinkedListStackQueue linStackQueue=new LinkedListStackQueue(); // 栈的测试原创 2017-02-21 11:11:34 · 449 阅读 · 0 评论 -
java 中LinkedList详解,附带一部分源码和ArrayList的比较
数据结构一般分为两大类: 线性数据结构如线性表、栈、队列、串、数组、和文件 n个元素的有限序列,除了第一个元素,其他元素只有唯一的一个前驱,除了最后一个元素,其他元素只有一个唯一的后继,所有数据在同一个线性表中必须是相同的数据类型。 非线性数据结构 如树和图下面这幅图表现的是我近期内要学习的一些集合类ArrayList 和LinkedList的区别: 1.ArrayList是实原创 2017-02-20 21:07:49 · 420 阅读 · 0 评论 -
java ArrayList 源代码分析
首先看一下ArrayList的实现:继承自AbstractList, 实现了List,RandomAccess, Cloneable,java.io.Serializable接口, 1. 可以看出它是支持泛型的,因此可以存储不同类型的对象, 2. 实现了RandomAccess, Cloneable,java.io.Serializable接口,但是其实他们都是空接口,里面没有任何方法声明,只原创 2017-02-20 16:41:34 · 304 阅读 · 0 评论 -
java 实现几种常见的排序算法
包含了 冒泡,快速排序,选择排序,插入排序,希尔排序,堆排序, 归并排序,基数排序package Test;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class SortAny { public static void main(String[] args) {原创 2017-02-20 17:21:28 · 286 阅读 · 0 评论