背景 说到java的特性,其中一个最重要的特性便是java通过new在堆中分配给对象的内存,不需要程序员主动去释放,而是由java虚拟机自动的回收.这也是java和C++的主要区别之一:那么虚拟机是如何实现自动回收的呢?它的基本回收算法又是什么呢?  这篇随笔先不介绍这些~ ~,熟话说 饭要一口一口地吃,路要一步一步地走嘛,这篇随笔主要讲解的是回收的前提:如何判断一个对象可以回收. 对java中如何判断一个对象可以回收的一般性认识 在没有学习<深入理解java虚拟机>之前,对于java中判断一…
简单聊聊java中的final关键字 日常代码中,final关键字也算常用的.其主要应用在三个方面: 1)修饰类(暂时见过,但是还没用过); 2)修饰方法(见过,没写过); 3)修饰数据. 那么,我们主要也是从一下几个方面探讨一下,主要是第三点. 一.final修饰类和方法 final修饰的类不可被继承(例如: String, Integer, Double, ....): final修饰的方法不可被重写(例如: AtomicInteger中的大部分方法) 二.final修饰数据 1. fina…
简单聊聊CSS中的3D技术之“立方体” 大家好,我是今天的男一号,我叫小博主. 今天来聊一下我在前端“逆战班”学习中遇到的颇为有趣的3D知识.前端学习3周,见识稀疏,在下面的分享中如有不对的地方请大家指教. 那下面我们直接来干货! 第一步.构建基础结构. 我们用div和ul-li列表来完成结构.如下图: 第二步.去除基础样式.设置大小和位置 这里比较重要的是给li设置相对定位来实现位置重叠,必须要先给ul设置绝对定位. positione: relative(绝对定位).positione: a…
转自:http://blog.csdn.net/chx10051413/article/details/40784667 http://www.cnblogs.com/baoendemao/p/3804797.html Java 中如何序列化一个对象 我们都知道java 中无法保存一个对象到文本文件中,但是当我们有这种需求的时候,我们可以通过java 的序列化功能把当前对象的一些属性以二进制的形式保存到文件中.当我们需要这个对象的时,只需要从二进制文件中还原为保存前的对象即可.从这里我们可以得到…
转自:http://blog.sina.com.cn/s/blog_538b279a0100098d.html 写的相当不错滴...................... 摘  要 Java语言中,内存空间中垃圾回收的工作由垃圾回收器(Garbage Collector,GC)完成,GC可以有效地减少内存泄露发生的概率,但它的启动无规律可循,因此不能完全避免内存泄露.通过分析产生内存泄露的原因,提出了Java编程中的一些注意事项,有效地避免了内存泄露.关键词  Java  内存泄露  垃圾回收器…
Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二.…
Java 的开发过程中免不了与 Date 类型纠缠,准备总结一下项目经常使用的日期相关操作,JDK 版本 1.7,如果能够帮助大家节约那么几分钟起身活动一下,去泡杯咖啡,便是极好的,嘿嘿.当然,我只提供了可行的解决方案,并不保证是最佳实践,欢迎讨论. 1. 日期取值 在旧版本 JDK 的时代,有不少代码中日期取值利用了 java.util.Date 类,但是由于 Date 类不便于实现国际化,其实从 JDK1.1 开始,就更推荐使用 java.util.Calendar 类进行时间和日期方面的处…
在前面的<兵分三路:如何创建多线程>文章中,我们已经通过Thread和Runnable直观地了解如何在Java中创建一个线程,相信你已经有了一定的体感.在本篇文章中,我们将基于前面的示例代码,对线程做些必要的说明,以帮助你从更基础的层面认知线程,并为后续的学习打下基础. 一.从进程认知线程 在上世纪的80年代中期之前,进程一直都是操作系统中拥有资源和独立运行的基本单位.可是,随着计算机的发展,人们对操作系统的吞吐量要求越来越高,并且多处理器也逐渐发展起来,进程作为基本的调度单位已经越来越不合时…
长久以来,我们被教导字符串的连接最好用StringBuffer.StringBuilder,但是我们却不知道这两者之间的区别.跟字符串相关的一些方法中总是有CharSequence.StringBuffer.StringBuilder.String,他们之间到底有什么联系呢? 1.从类的定义看CharSequence.StringBuffer.StringBuilder.String的关系 下面先贴上这四者的定义(来自JDK1.6) CharSequence是一个定义字符串操作的接口,Strin…
在编程过程中,很多技术人员看重程序的简洁性,效率性和包容性.其中最容易问到的就是假如输入数据不符合要求时的程序处理,这也是很多公司的机试题中应聘人员写出了符合功能要求的程序却并未通过面试的原因.下面是本人在刷<剑指offer>的过程中遇到的第一个问题,java中使用Scanner进行输入时,关于判定用户输入数据是否符合数据类型要求的处理的问题. 比如编程题中要求程序判定用户输入的数是否为水仙花数. 题意中虽然并没有特意说明数据类型,通常我们会采用int型变量作为程序中的主要参数,很多程序员在面…
Java中的多态允许父类指针指向子类实例.如:Father obj=new Child();  那么不禁要发问?? 使用这个父类型的指针访问类的属性或方法时,如果父类和子类都有这个名称的属性或方法,哪一个属性或方法会被调用呢? 动手看看 class Father { int r; Father() { r=4; } void printname() { System.out.println("I'm father"); } } class Child extends Father {…
写在前面 SPI机制能够非常方便的为某个接口动态指定其实现类,在某种程度上,这也是某些框架具有高度可扩展性的基础.今天,我们就从源码级别深入探讨下Java中的SPI机制. 注:文章已收录到:https://github.com/sunshinelyz/technology-binghe SPI的概念 SPI在Java中的全称为Service Provider Interface,是JDK内置的一种服务提供发现机制,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换…
有人说Java是一门静态语言.那么何为静态语言,动态语言又是什么? 1.动态语言 是一类在运行时可以改变其结构的语言:例如新的函数.对象.甚至代码可以 被引进,已有的函数可以被删除或是其他结构上的变化.通俗点说就是在运 行时代码可以根据某些条件改变自身结构. 主要动态语言:Object-C.C#.JavaScript.PHP.Python.Erlang. 2.静态语言 与动态语言相对应的,运行时结构不可变的语言就是静态语言.如C. C++. Java不是动态语言,但也不能简单的说成静态语言.Ja…
本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 反射reflection主要为了动态操作Java代码,它的主要功能体现在Java提供的reflection library中,在<Java核心技术>中总结反射作用:1.在运行中对类的结构进行动态分析:2.在运行中查看对象:3.实现通用的数组操作:4.利用Method对象.下面分几个章节,结合书中的代码,来仔细看看这四个作用是如何实现的(第一部分是理解反射机制的关键). 一.类的动态分析 在…
package test;//创建一个名为test的包 public class A4paper implements Paper { public String getSize(){ return"A4";//实现接口Paper } } package test; public class B5paper implements Paper { public String getSize(){ return"B5";//实现接口Paper } } package t…
构造器 在我们初始化对象时,如果希望设置一些默认值,那么就可以使用构造器,在Java中,构造器使用和类同名的名字且没有返回值,如下 class Test{ private String name; Test(String n){ name = n; } public String getName(){ return name; } } public class app { public static void main(String[] args){ Test test = new Test("…
引言 JDK中除了上文提到的各种并发容器,还提供了丰富的阻塞队列.阻塞队列统一实现了BlockingQueue接口,BlockingQueue接口在java.util包Queue接口的基础上提供了put(e)以及take()两个阻塞方法.他的主要使用场景就是多线程下的生产者消费者模式,生产者线程通过put(e)方法将生产元素,消费者线程通过take()消费元素.除了阻塞功能,BlockingQueue接口还定义了定时的offer以及poll,以及一次性移除方法drainTo. //插入元素,队列…
前言 在编程中异常报错是不可避免的.特别是在学习某个语言初期,看到异常报错就抓耳挠腮,常常开玩笑说编程1分钟,改bug1小时.今天就让我们来看看什么是异常和怎么合理的处理异常吧! 异常与error介绍 下面还是先让我们来看一下基本概念吧! ​ 异常指程序运行过程中出现的非正常现象,例如用户输入错误.除数为零.需要处理的文件不存在.数组下标越界等.异常机制本质就是当程序出现错误,程序安全退出的机制.在Java的异常处理机制中,引进了很多用来描述和处理异常的类,称为异常类.异常类定义中包含了该类异常…
先甩出来两种创建线程的方法: private static int count = 100; public static void main(String[] args) { // 用继承Thread类的方式启动一个线程 new Thread() { public void run() { synchronized (StartThreadTest.class) { while (count > 0) { count--; System.out.println(Thread.currentThr…
前言 最近在做项目里的自动化测试工作,使用的是TestNG测试框架,主要涉及的测试类型有接口测试以及基于业务实际场景的场景化测试.由于涉及的场景大多都是大数据的作业开发及执行(如MapReduce.Spark.Hql等任务的执行),而这些任务的执行都需要耗费较多的时间.举一个普遍的例子,其中一条场景测试用例是: 执行一个MapReduce作业,校验作业的执行结果和执行日志. 对于一个最简单的MR任务,如果YARN集群资源充足,它的执行时间也要花上将近一分钟的时间.更不用说当YARN集群计算资源饱…
前言 "我的风格比较偏传统和经典" 小明说,"我们在打扮自己的问题上还是蛮冒险的...我觉得当你是只狗的时候,穿什么都hold的住!" 哈哈哈,脱离单身狗快两年了,生活中除了爱情,不变的还有对代码的挚爱,总之始于热爱,忠于爱情,陷于代码. 前半年规划人生,后半年开始规划,最近发生的一些事情还是让自己倍感压力的,生活可以知足常乐,但人生不可以,如果你不把生命体验到极致,也许会被未来的自己所鄙视. 前世今生 String不可变这个话题应该是老生长谈了,你可以说它就是设计…
1.单例模式(有的书上说叫单态模式其实都一样) 该模式主要目的是使内存中保持1个对象.看下面的例子: package org.sp.singleton; //方法一 public class Singleton { //将自身的实例对象设置为一个属性,并加上Static和final修饰符 private static final Singleton instance = new Singleton(); //将构造方法设置成私有形式 private Singleton() { } //通过一个静…
1. 例子 首先来看一个例子: @Override public String toString() { return "xxxxx"; } 这里用了 @Override, 目的是告诉编译器这个方法重写了父类的方法, 如果编译器发现父类中没有这个方法就会报错. 这个注解的作用大抵是防止手滑写错方法, 同时增强了程序的可读性. 这里需要指出一点, @Override 去掉并不会影响程序的执行, 只是起到标记的作用 找到 @Override 的实现 package java.lang; i…
java异常体系 |--Throwable 实现类描述java的错误和异常 一般交由硬件处理 |--Error(错误)一般不通过代码去处理,一般由硬件保护 |--Exception(异常) |--RuntimeException(运行时异常) |--非运行时异常 多个try-catch语句联用时的顺序 1.顺序执行,从上到下,有一个catch子句匹配之后,后面的自动不在执行 2.如果多个cach内的异常有父子类的关系 一定要,子类异常在上,父类异常在下 自定义异常类型 一般都是提供两个构造参数,…
在刷谷歌面试题的过程中,发现一道有意思的题目,以前没有特别注意,忽略了一些东西,特此记录. 题目要求输出以下代码的结果: public class MyTest { public static void main(String[] args) { System.out.println(new Integer(2) == 2); System.out.println(new Integer(2) == new Integer(2)); System.out.println(Integer.valu…
timer的schedule和scheduleAtFixedRate方法一般情况下是没什么区别的,只在某个情况出现时会有区别--当前任务没有来得及完成下次任务又交到手上. 我们来举个例子: 暑假到了老师给schedule和scheduleAtFixedRate两个同学布置作业. 老师要求学生暑假每天写2页,30天后完成作业. 这两个学生每天按时完成作业,直到第10天,出了意外,两个学生出去旅游花了5天时间,这5天时间里两个人都没有做作业.任务被拖延了. 这时候两个学生采取的策略就不同了: sch…
我们看看 TiDB 一段代码的实现 --- 左外连接(Left Out Join)的消除; select 的优化一般是这样的过程: 在逻辑执行计划的优化阶段, 会有很多关系代数的规则, 需要将逻辑执行计划(LogicalPlan)树应用到各个规则中, 尝试进行优化改写; 我们看看其中的一条优化规则: outerJoinEliminator TiDB作为优秀的开源项目, 代码的注释也非常优秀, 里面提到了满足这些条件的 Left Outer Join 可以消除右表; // tryToElimina…
先看看下面的代码能不能编译通过: public static void main(String[] args) {List l1 = new ArrayList();List l2 = new ArrayList(){};List l3 = new ArrayList(){{}};System.out.println(l1.getClass() == l2.getClass() );System.out.println(l2.getClass() == l3.getClass() );Syste…
一.分代GC的理论基础 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对象,其中有些对象是与业务信息相关,比如Http请求中的Session对象.线程.Socket连接,这类对象跟业务直接挂钩,因此生命周期比较长.但是还有一些对象,主要是程序运行过程中生成的临时变量,这些对象生命周期会比较短,比如:String对象,由于其不变类的特性,系统会产生大量的这些对象,有…