
Java 基础启示录
笔者是软件工程专业的学生,在大三那年用一个暑假看了 7G 的传智播客的 Java 视频、自学出师后,从此踏上了 Java 程序开发的道路,至今仍对 Java 技术耐心不减,本专栏汇总笔者工作后碰到的 Java 基础知识。
毕小宝
从事 Java 开发 7 年+,精于 Java 服务器端程序开发,熟悉设计模式及其在各大主流框架中的应用原理,研究过 Java 并发包源码,搭建过 ORM 框架。路漫漫,仍然在路上的 Java 程序员!
-
原创 基于 JavaSwing 的招生信息管理系统的实现
昨天实现了一个基于 Java Swing 的招生信息管理系统,这个比以前做的复杂一点,它包含两个管理功能,通过菜单切换。每个功能都有增、删、改、查,数据使用文件保存到磁盘中,可在此基础上添加或修改为任意新信息的管理功能。此外,JComboBox 怎么和 Box 一起创建一行大小适中的表单界面?这也是本文要讨论的问题。2020-06-25 11:56:22399
0
-
原创 归纳法-生成全排列算法Java实现
数学领域的全排列问题,从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。《算法设计与技巧分析》这本书中,使用归纳法生成一组数【1,2,3……n】的所有排列问题,并用数组P[1……n]来存放每一个排列。该归纳法基于这样一个假设:可以生成n-1个数的所有排列,那么就可以扩展方法,生成1,2,……n这2016-02-19 14:11:572593
0
-
原创 简单东西-插入排序算法Java实现
简单插入排序算法 数据结构里面,常用的内部排序算法之一,简单插入排序。算法思想很简单,就是从第2个元素开始,用临时变量存储该待插入元素,然后从该位置处指针往回递减,如果某个位置处元素比该待插入元素大,就往后挪,直到找到某个位置处的元素比该元素小或相等,说明其后一个位置就是待插入元素的有序位置,则插入。实现算法如下:import java.util.Arrays;public2016-03-16 08:40:07619
0
-
原创 算法整理-二分查找列表最大值
需求描述 已知一个列表是先增后减的半有序列表,现在需要找出列表中的最大值,列表长度可能很大,考虑时间复杂度,该算法该如何实现?实现思路 在不考虑时间复杂的的情况下,可以直接遍历,用max标识来记录最大值,知道找到一个比最大值小的记录,说明列表开始降序,最大值就找到了。 如果考虑到时间复杂度,且是半有序的列表,收到二分查找的启发,可以使用二分查找,每次比较中间项与其相邻元素的大小,判断2016-11-04 17:49:093274
0
-
原创 Java基础-Servlet监听器
Servlet监听器,用来监听web容器的对象状态2014-08-31 21:46:00926
0
-
原创 JavaEE基础-Filter
Filter,是对2014-08-28 21:48:22898
0
-
原创 微信公共接口实现
今日工作是调研微信开发者接口,针对通用的接口2014-10-23 13:39:252099
0
-
原创 JavaEE-stuts2返回json数据简单实现
CSDN的ASK频道,看到关于struts2返回json数据的问题,整理了下struts2的简单demo,完成JSON数据的展示。 Action定义public class ValidateAction extends ActionSupport { private static final long serialVersionUID = 1L; private String u2015-04-24 15:43:126417
0
-
翻译 GC判断可回收对象算法
声明:本文摘录周志明先生的《深入理解Java虚拟机》,记录下GC算法中的可达性算法分析。是在问答频道看到一个对可达性算法的疑问,梳理下,也是自我学习巩固的过程。关于可达性算法的几点记录如下: 首先,可达性算法基本思路是定义一些列称为"GC-Roots"的对象作为起始阶段,从这些节点向下搜索,搜索走过的路径称为引用链,当一个对象到GCRoots没有任何引用链时(即从GCRoots到这个对象不可达2016-11-10 17:28:031033
0
-
原创 Java Process应用
Runtimejava可以通过Runtime来调用其他进程,如cmd命令,shell文件的执行等。可以应该该类设置系统时间,执行shell文件。此处记录几个有用应用如下。 设置本地时间可以调用cmd /c date命令,完成本地时间设置,不过这个命令在win7下可以使用,但是win10需要管理员权限,可能无法设置系统时间。win7下使用Java实现修改本地时间代码如下,需要注意的是waitFo2016-11-10 14:09:31562
3
-
原创 简单归并算法-有序数组合并算法实现
一个简单的有序数组合并算法:写一个函数,传入 2 个有序的整数数组,返回一个有序的整数数组。实现相当简单,创建一个长度为这两个长度之和的数组,然后分别用三个指针指向这三个数组,找到这两个数组中各个元素在合并数组中的位置并插入,直到某个数组指针到达尾部。再将另一个数组剩下的所有元素,直接放入归并数组尾部。算法的简单实现,需要注意的是对参数的校验,判断数组是否有序。 public2016-03-14 14:33:502133
0
-
原创 数据结构-单链表的java实现
单链表实现链表的打印及元素删除操作,链表的实现主要是next属性的定义,将一堆节点关联起来的。实现简单的链表如下:public class LinkNode { private int value; private LinkNode next; public LinkNode(int x) { value = x; } public LinkNode getNext(){2016-01-22 17:26:521345
0
-
原创 RSA算法实践整理
背景Web应用中对前端的密码进行加密,然后后台再解密,前端加密工具有jsencrypt.min.js可以使用,该工具在前端用公钥加密,后端私钥解密,以提高应用系统敏感数据的安全度。本文将整理RAS非对称加密算法的使用过程及注意事项,作为网络笔记,以备后用。RSA和Base64RSA加密算法是对输入的字节数组数据进行加密,输出另一个加密后的字节数组。这个字节数值数据该怎么存储呢?答案是使用Base642017-12-27 14:49:29417
0
-
原创 java基础-Reader的reset重置到文件首部
今天在CSDN问答频道看到一个问题,需要把一个BufferedReader读取完成之后,重新回到文件首部再读一遍。我想的是重新再new一个BufferedReader,后来查了下API发现有一个reset方法可以用,但是它要结合mark一起用。import java.io.File;import java.io.FileNotFoundException;import java.io.Fi2015-04-23 17:21:515720
1
-
原创 不同 Library handling 处理方式对 Jar 包结构的影响分析
背景Java的工程导出方式有多种,对于Java SE项目而言,基本的就是导出可执行jar和普通jar。可执行jar可以通过java -jar命令调用调用,普通jar可以作为第三方包被其他项目引用;而Java EE项目则是导出war包交给应用服务器使用。Jar包用压缩软件解压后,里面都包含一个META-INF的目录,目录下只有一个MANIFEST.MF文件,描述了Java的相关信息。不同类型的Jar,2017-12-14 10:52:271961
0
-
原创 Java并发编程实践
背景我的桌面一直留着一张Java线程知识结构图,近期正好有空梳理自己的技能知识,于是打印出来准备复习一下。2014年曾经把那本《Java并发编程实践》经典看过好几遍,不过时间太久远了,这张图上的多线程的知识有些也模糊了,趁此捡起来,于是有了本文的实践结果整理。Java线程知识图谱阻塞队列的应用多线程环境下的生产者/消费者算法大家都应该听说过,项目中涉及到的一个索引创建功能:一个线程每小时生成待创建索2017-11-16 16:49:41496
0
-
原创 Tomcat源码分析-Java原生态log运用
背景调试tomcat源码过程中,控制台日志打印的都是INFO级别的日志,于是就想修改下日志级别,打印Digester类的DEBUG级别的日志,便于观察Digester类解析server.xml的流程,顺便跟踪了一下tomcat使用日志的流程,整理如下。使用方法Java提供了原生态的日志工具包java.util.logging,功能虽然没有log4j强大,但是够用了,我想这也是tomcat使用原生日志2017-06-07 16:19:02808
0
-
原创 简单东西 Java 定时调度线程池用法
If any execution of the task encounters an exception, subsequent executions are suppressed. Otherwise, the task will only terminate via cancellation or termination of the executor. If any execution of2017-03-10 18:16:581358
0
-
原创 垃圾收集器-周志明先生的深入理解JVM摘录
1 HotSpot的垃圾收集是基于分代的,不同代的内存区域根据其对象生命周期的长短特性选择不同的垃圾收集算法。 HotSpot提供的垃圾收集器: 2 看周志明显示的《深入理解Java虚拟机》第三章垃圾收集器与内存分配,对Young generation的Parallel Scaverge和Tenured generation的CMS印象深刻,简单整理了下相关的知识。H2014-12-07 13:31:472907
0
-
原创 java基础-HashMap动态扩容数据转移源码阅读
HashMap,一种利用元素key的hash值查找元素的容器数据结构。其动态扩容的操作流程:遍历原Entry数组,将每个数组元素的bucket链表数据转移到扩容的新数组中,同时释放原数组的内存。JDK源码如下: /** * Transfers all entries from current table to newTable. */ void tran2014-12-22 14:37:242332
0
-
原创 HotSpot GC日志分析
HotSpot的内存分配的基本策略是对象优先在Eden区分配,如果Eden区剩余空间不足以分配内存时,触发minorGC,将Eden区数据复制到Survior区,如果Survior区空间不够,则将存活对象复制到Old区域。测试GC回收的简单代码:/** * * @title :TestMain * @description :-Xms20M -Xmx20M -Xmn12014-12-19 17:01:251409
0
-
原创 java基础-数值运算中的类型转换问题
1) 一个简单的运用,需要打印一个月的日志记录(日志每天每隔一个小时生成一条记录),简单实现时需要用到每小时的毫秒数,结果发现定义每小时的毫秒这个基数的类型不同,得到的结果也不同。这是一个很容易忽略的问题,int类型的长度是4字节,如果是大数乘法会导致结果溢出而得到莫名其妙的结果。public static void main(String[] args) { int hou2014-12-02 16:49:461952
0
-
原创 Java基础-泛型和包装类的语法糖
Java的泛型,本质是一种糖衣语法2014-09-11 22:20:451242
0
-
原创 Java并发编程-volatile变量
Java 并发的同步工具中,volatile 提供了一种弱的线程同步机制,它包含了两种语义: 1)禁止编译器对其修饰的代码进行重组; 2)将变量的写操作立即同步到内存中而不缓存在寄存器里,确保该变量的写入操作得对其它线程立即可见。volatile 的局限性体现在:volatile 变量只能确保可见性,它不能保证对变量操作的原子性。例如,count++,它由 “读-修改-写入” 三...2014-10-26 16:20:201034
0
-
原创 Java基础-Map容器的并发访问控制
在并发环境中,多线程之间共享数据时,需要对数据访问进行并发控制。例如,经典的生产者-消费者的实例中,生产线程和消费线程共享同一个容器对象,那么必须使用线程安全的容器对象。 简单的使用HashMap,统计某些key的出现次数,正确的并发控制代码如下:2016-02-15 23:00:172035
0
-
原创 Java基础-jdk自动资源管理功能
JDK1.7新功能中,一个很好用的功能就是自动资源管理功能try-with-resources。 try-with-resources 是一个定义了一个或多个资源的try 声明,这个资源是指程序处理完它之后需要关闭它的对象。try-with-resources 确保每一个资源在处理完成后都会被关闭。 任何实现了java.lang.AutoCloseable 接口和java.io.Cl2016-02-14 22:19:48759
0
-
原创 简单东西-java动态更改JLabel背景图片
java的awt设置背景图片的一种方式是使用JLabel类,它的setIcon可以设置背景图片,但是如何动态修改背景图片呢?这源于问答频道上的一个问题,题主给的代码总是无法正确动态修改背景图片,找了一阵子,发现它处理点击事件的代码存在错误,JLabel类对象实例化一次就够了,然后动态setIcon修改背景。而不是在点击时重新实例化标签对象。public class DynamicBackgro2016-01-17 21:17:248202
1
-
原创 Java基础-环境变量
最开始接触Java时都要求配置系统的环境变量Java_Home,path这两个2014-08-27 21:49:131300
0
-
原创 java基础-finally块对return变量的影响分析
java语句的try-catch-finally执行过程中,finally语句块中如果操作了return语句的变量,它对方法的返回值是没有影响的,通过javap分析生成的字节码可以知道,在正常代码块执行完成后,会将需要返回的值存储到单独的局部变量中,而finally操作的局部变量仍然是返回值最初存入的局部变量。由于返回值做了备份,finally对原局部变量的重定向(如果是引用类型),或者修改(基础2015-03-17 09:13:531184
0
-
原创 Java基础-工作总结
最近工作2014-10-22 21:13:45708
0