
Java
主要针对java集合,IO,多线程,网络编程,异常,安全,数据类型,运算等一些技术的难点,盲点,面试考点,以及实战中经常遇到的细小问题的经验总结。
袭烽
资深 APP 和前端高级研发,精通 Android/Java/H5/小程序开发,对 Uniapp、Hybrid、RN、Flutter、鸿蒙等跨端技术有深入实战和研究,主持过电商、保险、政务、K12教育、OA、HR、CRM、ERP 、办公自动化等大中型系统的研发和实施工作。
展开
-
NIO与传统IO的区别
感性认识: 传统的socket IO中,需要为每个连接创建一个线程,当并发的连接数量非常巨大时,线程所占用的栈内存和CPU线程切换的开销将非常巨大。使用NIO,不再需要为每个线程创建单独的线程,可以用一个含有限数量线程的线程池,甚至一个线程来为任意数量的连接服务。由于线程数量小于连接数量,所以每个线程进行IO操作时就不能阻塞,如果阻塞的话,有些连接就得不到处理,NIO提供了这种非阻塞的能力。 小翻译 2014-05-04 16:57:33 · 13860 阅读 · 5 评论 -
Java对象池
单例模式是限制了一个类只能有一个实例,对象池模式则是限制一个类实例的个数。对象池类就像是一个对象管理员,它以Static列表(也就是装对象的池子)的形式存存储某个实例数受限的类的实例,每一个实例还要加一个标记,标记该实例是否被占用。当类初始化的时候,这个对象池就被初始化了,实例就被创建出来。然后,用户可以向这个类索取实例,如果池中所有的实例都已经被占用了,那么抛出异常。用户用完以后,还要把实例“还原创 2013-08-07 03:41:40 · 9788 阅读 · 2 评论 -
Spring中线程池的应用
多线程并发处理起来通常比较麻烦,如果你使用spring容器来管理业务bean,事情就好办了多了。spring封装了java的多线程的实现,你只需要关注于并发事物的流程以及一些并发负载量等特性,具体来说如何使用spring来处理并发事务:1.了解 TaskExecutor接口Spring的TaskExecutor接口等同于java.util.concurrent.Executor接口。原创 2013-05-23 11:54:06 · 52958 阅读 · 9 评论 -
Java堆栈详解
1. Java中堆栈(stack)和堆(heap)(1)内存分配的策略 按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不 允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为原创 2013-02-22 10:41:32 · 3463 阅读 · 2 评论 -
Java 程序里的内存泄漏
译序:Java 的内存泄漏,这不是一个新话题。Jim Patrick 的这篇文章早在 2001 年就写出来了。但这并不意味着 Java 的内存泄漏是一个过时了的甚至不重要的话题。相反,Java 的内存泄漏应当是每一个关心程序健壮性、稳定性和高性能的程序员所必须了解的知识。本文将揭示什么时候需要关注内存泄漏以及如何进行防止。摘要:Java 程序里也存在内存泄漏?当然。和流行的看法相反,内存管翻译 2013-02-20 18:05:32 · 2852 阅读 · 0 评论 -
Java 内存分配全面浅析
本文将由浅入深详细介绍Java内存分配的原理,以帮助新手更轻松的学习Java。这类文章网上有很多,但大多比较零碎。本文从认知过程角度出发,将带给读者一个系统的介绍。进入正题前首先要知道的是Java程序运行在JVM(Java Virtual Machine,Java虚拟机)上,可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了Java的平台无关性,由此可见JVM的重要性。所以在学习翻译 2013-02-20 17:54:45 · 109412 阅读 · 64 评论 -
Java回调函数详解
为了了解什么是回调函数,在网上查阅了如下资料,整理如下:资料一:首先说说什么叫回调函数?在WINDOWS中,程序员想让系统DLL调用自己编写的一个方法,于是利用DLL当中回调函数(CALLBACK)的接口来编写程序,使它调用,这个就 称为回调。在调用接口时,需要严格的按照定义的参数和方法调用,并且需要处理函数的异步,否则会导致程序的崩溃。这样的解释似乎还是比较难懂,这里原创 2013-01-31 17:59:23 · 11979 阅读 · 5 评论 -
ASCII,Unicode和UTF-8
今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料。结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞清楚。下面就是我的笔记,主要用来整理自己的思路。但是,我尽量试图写得通俗易懂,希望能对其他朋友有用。毕竟,字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识。1. ASCII码我们知道,在计算机内部翻译 2012-10-22 15:21:56 · 1889 阅读 · 0 评论 -
Highcharts纯Javascript图表使用讲解(附Demo全源码案例)
Highcharts是一个制作图表的纯Javascript类库,主要特性如下:兼容性:兼容当今所有的浏览器,包括iPhone、IE和火狐等等;对个人用户完全免费;纯JS,无BS;支持大部分的图表类型:直线图,曲线图、区域图、区域曲线图、柱状图、饼装图、散布图;跨语言:不管是PHP、Asp.net还是Java都可以使用,它只需要三个文件:一个是Highcharts的核心文原创 2012-10-19 11:38:34 · 16523 阅读 · 7 评论 -
利用XStream在Java对象和XML之间相互转换
XStream是个好东西,可以方便在Java对象和XML之间相互转换,效率和可读性都非常高,下面是我写的一个测试的例子,放出来一块看看。 需要的jar包如下:xpp3_min-1.1.4c.jarxstream-1.3.jar 目标:将Persons对象转原创 2011-10-10 18:06:48 · 1510 阅读 · 0 评论 -
Java容易搞错的知识点
一、关于Switch代码:Java代码 1 public class TestSwitch { 2 public static void main(String[] args) { 3原创 2011-08-19 13:34:20 · 1760 阅读 · 1 评论 -
完全精通java输入输出流
<br />Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象。在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流....本文的目的是为大家做一个简要的介绍。 <br /> <br /> 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开原创 2011-02-21 18:58:00 · 1966 阅读 · 1 评论 -
设计模式之Factory
工厂模式定义:提供创建对象的接口.为何使用?工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,虽然这样原创 2010-04-26 23:23:00 · 1243 阅读 · 0 评论 -
输出的数字的格式DecimalFormat的方法用途
有时我们需要控制输出的数字的格式,如何使用java的类库做到这个呢? 也许你不关心格式,但是你需要关心你的程序可以在全世界通用,像下面的这样一个简单的语句是依赖地区的: System.out.println(1234.56); 在美国,"." 是小数点,但在其它地方就不一定了。如何处理这个呢? java.text 包中的一些包可以处理这类问题。下面的简单范例使原创 2009-11-11 11:25:00 · 1882 阅读 · 0 评论 -
浅谈BigDecimal类在电子商务中至关重要的地位!
一提到Java里面的商业计算,我们都知道不能用float和double,因为他们无法进行精确计算。但是Java的设计者给编程人员提供了一个很有用的类BigDecimal,他可以完善float和double类无法进行精确计算的缺憾。BigDecimal类位于java.maths类包下。首先我们来看下如何构造一个BigDecimal对象。它的构造函数很多,我挑最常用的两个来演示一下:一个就是BigDe原创 2009-11-11 11:07:00 · 1458 阅读 · 0 评论 -
Java内存溢出和内存泄露
虽然jvm可以通过GC自动回收无用的内存,但是代码不好的话仍然存在内存溢出的风险。最近在网上搜集了一些资料,现整理如下: 一、为什么要了解内存泄露和内存溢出? 1、内存泄露一般是代码设计存在缺陷导致的,通过了解内存泄露的场景,可以避免不必要的内存溢出和提高自己的代码编写水平; 2、通过了解内存溢出的几种常见情况,可以在出现内存溢出的时候快速的翻译 2014-03-22 22:29:38 · 15868 阅读 · 6 评论 -
Eclipse中,打开文件所在文件夹的插件,及设置
如果你经常需要在Eclipse里打开相关资源文件所在的文件夹,比较麻烦,要右键,属性,在Location一栏中把所在的文件夹拷贝一下,然后再去资源管理器里输入这个路径,回车,打开它。解决方法: 用EasyExplorer插件,有了这个插件就可以很方便地打开资源文件所在的文件夹了.安装: EasyExplorer 从http://sourceforge.net/projects/原创 2013-11-01 11:41:22 · 3794 阅读 · 1 评论 -
Myeclipse2013下载,安装,破解,介绍(优快云首发)
MyEclipse 2013新特性根据官方最新消息,MyEclipse 2013已经正式发布!MyEclipse 2013支持HTML5、JQuery和主流的Javascript 库。 随着MyEclipse 2013支持Html 5,你可以添加音频、视频和API元素到你的项目,从而为移动设备创建复杂的Web应用程序。你甚至还可以通过HTML5 可视化设计器设计令人难以置信的用户界面。同时,随原创 2013-10-30 11:12:51 · 6670 阅读 · 1 评论 -
HashMap的实现原理
1. HashMap概述:HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。2. HashMap的数据结构:在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。Ha翻译 2013-08-22 14:41:57 · 7454 阅读 · 5 评论 -
Java线程详解
Java线程:概念与原理一、操作系统中线程和进程的概念现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。 线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线翻译 2013-08-16 16:57:25 · 8746 阅读 · 14 评论 -
Java中守护线程的总结
在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆:只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是翻译 2013-05-23 11:32:41 · 115213 阅读 · 23 评论 -
Java自学视频整理(持续更新中...)
1.Java基础视频 《张孝祥JAVA视频教程》完整版[RMVB](东西网)历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播客)张孝祥2010年贺岁视频:Java高新技术(传智播客)Java多线程与并发库高级应用(传智播客)尚学堂JAVA视频下载大全(持续更新中...请关注!)(尚学堂)《动力节点,王勇JAVA系列视频教程》(东西网)张孝祥Java高新技术原创 2013-04-17 17:08:21 · 74960 阅读 · 48 评论 -
Hashtable和HashMap的区别
Hashtable和HashMap的区别: 1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类; 2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Colle原创 2009-10-16 11:48:00 · 1591 阅读 · 1 评论 -
java中关于时间日期操作的常用函数
1.计算某一月份的最大天数Calendar time=Calendar.getInstance(); time.clear(); time.set(Calendar.YEAR,year); time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0 int day=time.getActualMaximum(Calendar.DAY原创 2009-10-16 13:32:00 · 1563 阅读 · 1 评论 -
用Java实现断点续传(HTTP)
public static void down(String URL,long nPos,String savePathAndFile){ HttpURLConnection conn =null; try{/* String content="" +"" +"04" +"" +"" +"" +"" +"";*/ conn = (HttpURLConnection)new URL(URL).openConnect原创 2010-10-21 12:53:00 · 20369 阅读 · 9 评论 -
Java中的枚举(一)
在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”。在Java中想表示这种数据集最容易想到的写法可能是这样,我们以表示一周五天的工作日来举例: Java代码public class WeekDay { public static final int MONDAY = 1; public static final int TUESDAY原创 2010-09-27 11:23:00 · 2506 阅读 · 1 评论 -
Java中的枚举(二)
<br />到目前为止,我们仅仅使用了最简单的语法定义枚举类型,其实枚举类型可以做更多的事情,在Tiger的定义中,枚举是一种新的类型,允许用常量来表示特定的数据片断,它能胜任普通类的大部分功能,如定义自己的构造函数、方法、属性等等。这也是Java与C/C++或是Pascal中不同的地方,在那两种语言中枚举类型代表的就是一些int类型的数字,但在Java中枚举更像是一个类。 <br /> 接下来我们将丰富一下我们的枚举类型。<br /> 前面定义了包含五个工作日的枚举类型,但是真正在每个工作日进行操作原创 2010-09-27 11:28:00 · 1800 阅读 · 1 评论 -
list 集合
3、List集合 List集合为列表类型,列表的主要特征是存放其中的对象以线性方式存储,没有特定的顺序,只有一个开头和结尾,当然,它与根本没有顺序的集类型时不同的。 (1)List集合的用法 List集合包括List接口以及List接口的所有实现类。因为List接口继承了Collection接口,所以List接口拥有Collection接口提供的所有常用方法,又因为List是列表类型,原创 2011-08-09 17:10:32 · 8490 阅读 · 4 评论 -
Map集合
Map集合为映射类型,映射与集和列表有明显的区别,映射中的每个对象都是成对存在的。映射中存储的每个对象都有一个相应的键(Key)对象,在检索对象时必须通过相应的键对象来获取值(value)对象,类似于在字典中查找单词一样,因此要求键对象必须是惟一的。键对象还决定了存储对象在映射中的存储位置,但并不是键对象本身决定的,需要通过一种散列技术进行处理,从而产生一个被称作散列码的整数值,散列码通常用作一个原创 2011-08-09 17:13:17 · 6348 阅读 · 1 评论 -
Set集合
Set集合为集类型,集是最简单的一种集合,存放于集中的对象不按特定方式排序,只是简单地把对象加入集合中,类似于向口袋里放东西。对集中存在的对象的访问和操作是通过对象的引用进行的,因此在集中不能存放重复对象。Set集合包括Set接口以及Set接口的所有实现类。因为Set接口继承了Collection接口,所以Set接口拥有Collection接口提供的所有常用方法。(1)使用HashSet类原创 2011-08-09 17:13:51 · 2756 阅读 · 1 评论 -
Collection接口
在java.util包中提供了一些集合类,常用的有List、Set和Map类,其中List类和Set类继承了Collection接口。这些集合类又称为容器,它们与数组不同,数组的长度是固定的,而集合的长度是可变的,数组用来存放基本数据类型的数据,集合用来存放类对象的引用。List接口、Set接口、Map接口以及Collection接口的主要特征如下: ● Collection接口是List原创 2011-08-09 17:14:23 · 7344 阅读 · 2 评论 -
Java 枚举常见7种用法
用法一:常量在JDK1.5 之前,我们定义常量都是: publicstaticfianl....。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。Java代码 public enum Color {RED, GREEN, BLANK, YELLOW } 用法二:switchJDK1.6之前的switch语原创 2012-11-27 18:38:43 · 3640 阅读 · 1 评论 -
Java安全(加密、摘要、签名、证书、SSL、HTTPS)
对于一般的开发人员来说,很少需要对安全领域内的基础技术进行深入的研究,但是鉴于日常系统开发中遇到的各种安全相关的问题,熟悉和了解这些安全技术的基本原理和使用场景还是非常必要的。本文将对非对称加密、数字摘要、数字签名、数字证书、SSL、HTTPS等这些安全领域内的技术进行一番简要的介绍,解释他们之间的关系,同时补充一些周边话题。安全领域的技术众多,但是归根结底,他们都是为了保障如下三个方面:原创 2013-01-06 12:31:58 · 12914 阅读 · 9 评论 -
Java中的TCP/UDP网络通信编程
网络应用中基本上都是TCP(Transmission Control Protocol传输控制协议)和UDP(User Datagram Protocol用户数据报协议),TCP是面向连接的通信协议,UDP是无连接的通信协议.127.0.0.1是回路地址,用于测试,相当于localhost本机地址,没有网卡,不设DNS都可以访问.端口地址在0~65535之间,其中0~1023之间的端口是用原创 2013-01-22 14:46:26 · 8693 阅读 · 4 评论