JAVA进阶--基础查缺补漏
文章平均质量分 69
自然鸟神
我热爱编程,搜索引擎
展开
-
【转】Java获取泛型T的具体类型
在日常的开发中特别是框架的设计或者实用反射的时候,经常会实用class类去做一些事情,但是由于系统的抽象等问题,经常实用泛型去做一些事情。所以如何在泛型中获取具体的class类呢?解决方案:父类本身不获取泛型的具体类型,仅提供抽象方法,由子类来提供具体的类型public abstract class Foo<T> { public abstract Class g...转载 2020-01-18 11:15:21 · 1803 阅读 · 0 评论 -
阿里面试真题:慢SQL优化思路
其实这是个常见的面试题目:1、知识点一:执行计划:具体参数可以参见:https://segmentfault.com/a/1190000008131735各列的含义如下: id: SELECT 查询的标识符. 每个 SELECT 都会自动分配一个唯一的标识符. select_type: SELECT 查询的类型. table: 查询的是哪个表 parti...原创 2020-01-12 16:55:10 · 5938 阅读 · 0 评论 -
阿里面试真题:给定一个二叉树,找出其最小深度
给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。参考文档:https://juejin.im/post/5b8d64346fb9a01a1d4f99faclass Solution { public int minDepth(TreeNode root) { if(root == null) ret...原创 2020-01-02 10:46:06 · 1195 阅读 · 0 评论 -
阿里面试真题:ABC三个线程如何保证顺序执行?
其实这一个题有很多解,面试官想听的可能是CountDownLatch这一种,因为面试官也只会这一种。。参考了网络不过总体思路没错。public class ThreadOderRun { public static void main(String[] args) { ThreadOderRun threadOderRun = new ThreadOderRun...原创 2020-01-01 10:31:11 · 3654 阅读 · 0 评论 -
try后的finally{}里面的code的执行
在这里先举几个例子:import java.util.Date;public class TestOne extends Date{ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(test()); } public stat原创 2017-04-24 10:12:12 · 403 阅读 · 0 评论 -
Java中内存泄漏的情况
首先,所谓的内存泄漏就是指一个不再被程序使用的对象或者变量一直被占据在内存中。java中有垃圾回收机制,他可以保证一对象不再被引用的时候,机对象编程的孤儿的时候,对象将自动被垃圾回收器从内存中清楚掉。由于java使用有向图的方式进行垃圾回收管理,可以消除引用循环的问题,例如有两个对象,相互引用,只要他们的根进程不可达,那么GC也是可以回收他们的import java.io.IOExceptio原创 2017-04-24 11:04:59 · 276 阅读 · 0 评论 -
java架构师之路:JAVA程序员必看的15本书(转)
作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们。一、Java编程入门类 对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是“囫囵吞枣转载 2017-04-24 17:00:40 · 370 阅读 · 0 评论 -
java中需要自己进一步理解的技术
前言今天看了一名三年经验的Coder的面试经验不禁想到了自己工作也有差不多三年了,只不过在这三年里面从前端到后端,从PHP到JAVA。自己也走了很多错路,花了很多时间通过一段时间的思考还是感觉自己在java的路上继续深入和磨练。希望自己在技术上能越走越远。正文不喜欢瞎琢磨的程序员不是好猿关于专业技能static的小故事:今天面试我问你static关键字有哪些作 用,如果你答原创 2017-02-27 15:33:56 · 971 阅读 · 0 评论 -
自己需要进一步学习的JAVA技术之招聘对照
来自于某某网任职要求: 1、掌握:Servlet/JSP/HTML/JavaScript/JDBC/SQL/XML/HTTP; 2、掌握:Tomcat/Resin的配置和使用; 3、掌握:Java/JavaEE 、Apacha Commons (API、JVM、Thread、OO等); 4、熟悉linux系统和Spring,具有一定面向对象编程、设计模式基础; 5、了解MV原创 2017-03-09 22:38:08 · 566 阅读 · 0 评论 -
JAVA中常量使用常量类或者常量接口,还是使用枚举的区别
转载来源:最近在熟悉小组的代码时看见常量声明的不同方式就看了看这几种方式的不同之处。。来源:https://segmentfault.com/q/1010000007620581?_ea=1406439第一种使用接口:public interface Constants{ public static final int AUDIT_STATUS_PASS = 1;转载 2017-07-27 17:23:45 · 15766 阅读 · 3 评论 -
java的几个小知识
1.一个“.java”的原文件是否可以包含多个类(非内部类)?有什么限制?可以有多个类,但是只能有一个public的类,且类名必须与文件名相一致。2.Java有没有goto?java中的保留字,现在还没有在java中使用3.char类型变量中能不能存贮一个中文汉字?为什么?char类型变量是用来存储Unicode编码的,也就是说Unicode字符集中包含了汉字,所以可以存储包含原创 2017-04-21 14:50:53 · 351 阅读 · 0 评论 -
Java内部类的使用小结
内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相同。*内部类可以是静态static的,也可用public,default,protected和private修饰。(而外部顶级类即类名和文件名相同的只能使用public和default)。 注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。对于一个名为outer的外部类和其内部定义的名为inner的内部类转载 2017-04-21 17:28:07 · 270 阅读 · 0 评论 -
java中抽abstract和interface
对于abstract class和interface的区别含有abstract修饰符的class即为抽象类,abstract类不能创建的实例对象。含有abstract的方法的类必须定义为abstract class ,而对于abstract class类中的方法不必是抽象的。abstract class中定义的方法必须在concrete子类中实现,所以,不能有抽象的构造方法和抽象静态方法,原创 2017-04-21 16:33:14 · 232 阅读 · 0 评论 -
overload和override的区别
overload是重载的意思,override的覆盖的意思,也就是重写,这个大家都很清楚。。但是重载表示同一个类中可以有多个名称相同的方法,但是这些方法的参数列表各不相同重写表示的是子类的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法是,将调用子类中定义的方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。子类覆原创 2017-04-21 15:46:19 · 470 阅读 · 0 评论 -
静态变量和实例变量的区别
在语法定义上的区别:静态变量前面要加static关键字,而实例变量前则不加在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用实例变量。静态变量不属于某个实例对象,而是属于类吗,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,今天变量就可以使用了。例如对于下面的程序,无论创建多少个实例对象,用于原创 2017-04-21 15:25:13 · 1499 阅读 · 0 评论 -
java学习技术思维导图
转载 2017-05-23 14:28:18 · 3913 阅读 · 2 评论 -
java的对象祖先Object的源码
/* * Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * *原创 2017-04-21 15:12:58 · 258 阅读 · 0 评论 -
JAVA泛型通配符T,E,K,V区别,T以及Class<T>,Class<?>的区别
最近在看Spring的源码,所以就遇见了ApplicationListener?> listener 这种类似的代码,,,最近的脑袋不好使了确实忘了泛型的用法了,特意搜了一下泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。Java语言引入泛型的好处是安全简单。转载 2017-09-14 11:51:47 · 7984 阅读 · 0 评论 -
Class.isAssignableFrom(Class clz)方法 与 instanceof 关键字的区别
最近研究Spring源码发现很多好玩的事情 ,同时也是自己查缺补漏的过程Class.isAssignableFrom()是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的子类或接口。 格式为: Class1.isAssignableFrom(Class2) 调用者和参数都是java.lang.Class类型。 而insta转载 2017-08-30 17:35:28 · 213 阅读 · 0 评论 -
InterruptException
之所以转载这篇博客是因为在公司的时候和同事讨论什么时候会发生interruptException,感觉自己的思路不是很清晰中断线程详解(Interrupt)官方文档中对此有详细说明:《为何不赞成使用 Thread.stop、Thread.suspend 和 Thread.resume?》。在此引用stop方法的说明:1. Why is Thread.stop depre转载 2017-08-28 18:00:46 · 2854 阅读 · 0 评论 -
架构师方向提升技术视野学习计划---广度部分
学习规划总共分为五大部分,分别是:大数据技术基础 离线计算Hadoop 流式计算Storm 内存计算Spark 机器学习算法大数据技术基础linux操作基础linux系统简介与安装 linux常用命令–文件操作 linux常用命令–用户管理与权限 linux常用命令–系统管理 linux常用命令–免密登陆配置与网络管理 linux上常用软件安装 linux本地...转载 2019-03-14 16:37:47 · 674 阅读 · 0 评论 -
ConcurrentHashMap能完全替代HashTable吗?
关于ConcurrentHashMap在之前的ConcurrentHashMap原理分析中已经解释了原理,而HashTable其实大抵上只是对HashMap的线程安全的封装,在JDK7与JDK8中HashMap的实现中解释了HashMap的原理。至此你应该能够明白,ConcurrentHashMap与HashTable都可以用于多线程的环境,但是当Hashtable的大小增加到一定的时候,性能...转载 2019-01-22 08:26:11 · 1533 阅读 · 0 评论 -
面试杂项
延迟消息队列的实现方式---考察架构设计和逻辑思维性--架构设计----NO;cms 垃圾回收期的高阶—答不上来持久带是否发生fullGC okjps----okjstack----okjmap jhat------dump日志,jhat 不清楚jstat----不清楚dump文件中的分析jstack Dump 日志文件中的线程状态dump 文件里,值得关注的线程状态有:...原创 2019-01-17 16:29:51 · 1548 阅读 · 0 评论 -
函数性能对比工具之JMH
概述JMH 是一个由 OpenJDK/Oracle 里面那群开发了 Java 编译器的大牛们所开发的 Micro Benchmark Framework 。何谓 Micro Benchmark 呢?简单地说就是在 method 层面上的 benchmark,精度可以精确到微秒级。可以看出 JMH 主要使用在当你已经找出了热点函数,而需要对热点函数进行进一步的优化时,就可以使用 JMH 对优化的...转载 2018-08-21 11:15:46 · 1621 阅读 · 0 评论 -
git技巧一则:git重命名分支
重命名git分支名称 1、git branch -m 要改的本地分支名 修改后的分支名(修改本地分支) 2、 git push origin :远程修改前的分支名(删除远程分支) 3、git push origin 修改后的分支名:修改后的分支名(push 到远程分支) 4、git branch --set-upstream 修改后的分支名 origin/修改后的分支名(绑...原创 2018-08-23 20:37:51 · 12400 阅读 · 0 评论 -
转:lombok工具的使用
Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。官方地址:https://projectlombok.org/,github地址:https://github.com/rzwitserloot/lombok。@Getter and @Setter你可以用@Getter / @Setter注...转载 2018-07-13 10:40:07 · 230 阅读 · 0 评论 -
转:Guava学习笔记之Joiner ,Strings,Splitter 工具实例
在工作的过程中,如果写业务的话。那么就是拼工具箱里工具了。Guava对于很多JDK 1.7的人来说是不错的一个工具,而且很好用说的几个都是基础的功能Strings1.Strings.padEnd方法//padEnd普全右 String a="12345"; String b=Strings.padEnd(a, 10, 'x'); System.out.println(b); 结果...转载 2018-07-12 15:14:20 · 679 阅读 · 0 评论 -
好用的Joda-Time
简介在Java中处理日期和时间是很常见的需求,基础的工具类就是我们熟悉的Date和Calendar,然而这些工具类的api使用并不是很方便和强大,于是就诞生了Joda-Time这个专门处理日期时间的库。由于Joda-Time很优秀,在Java 8出现前的很长时间内成为Java中日期时间处理的事实标准,用来弥补JDK的不足。在Java 8中引入的java.time包是一组新的处理日期时间的API,遵...转载 2018-04-19 19:49:35 · 535 阅读 · 0 评论 -
重写toString方法
一、简介与引入 1、ToStringBuilder、HashCodeBuilder、EqualsBuilder、ToStringStyle、ReflectionToStringBuilder、CompareToBuilder等这些类都是位于commons-lang.jar下面的,所以要使用这些类一定要导入commons-lang.jar。 2、为什么要使用ToStringBuild转载 2016-06-12 14:40:27 · 1007 阅读 · 0 评论 -
通过父类的泛型获取子类的类型Class.getGenericSuperclass
今天有个比较意思的需求就是抽象一个父类出来,可以根据子类给父类中的方法赋值class的值。就用到了public class Person {}import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;public class Student extends Person {public st转载 2018-01-03 16:54:55 · 3072 阅读 · 0 评论 -
对于CPU伪内存共享问题学习
事情由来是对于Log4j2中存在两种异步处理日志的方式,AsyncAppender和AsyncLogger两种,一个是基于BlockingQueue实现,一个是基于Disruptor实现的。。而Disruptor是无锁的方式,环形队列,对于队首尾都是采用数据padding的方式解决伪共享的问题。。对于CPU的伪共享参见:http://coderplay.iteye.com/blog/148原创 2017-10-16 17:25:05 · 925 阅读 · 0 评论 -
java中的线程池技术及优化
写下这篇文章的原因是因为团队中有一个项目使用了这项技术而且出现了性能上的问题。。我个人对这个问题也产生了很大的兴趣 private static ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("ThreadPoolName").build(); private static ThreadPoolE原创 2017-09-30 14:05:01 · 5751 阅读 · 0 评论 -
getClass()和getSimpleName()的区别和作用
接口:package com.test;public interface Fruit {}一个实现类:package com.test;public class Apple implements Fruit {}基本测试类package com.test;import java.util.ArrayList;import java.util转载 2017-09-01 09:55:36 · 708 阅读 · 0 评论 -
“==”和equals方法究竟有什么区别?
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或者两个引用变量是否相等;其中基本类型是指:byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。int:32位,最大数据存储容量是2的32次方减1,原创 2017-04-21 15:11:26 · 1671 阅读 · 0 评论 -
在java中如何跳出多重嵌套循环
1.在java中,想跳出多重循环可以在外面的循环语句前面定义一个标号,然后在里层循环体的代码中使用带标号的break语句,即可跳出多重循环。例如 ok: for(int i=0;i<10;i++) { for(int j=0;j<11;j++) { if(j==6) break ok; } }2.但是,以上方法很少使用通常使用的是标志位的做法 boolean原创 2017-04-21 14:38:34 · 528 阅读 · 0 评论 -
说说&& 和 &的区别
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当两边的表达式的结果都为true时,整个运算结果才为true,否则,只要一方为false,则结果为false。&&具有短路功能,如果第一个表达式为false则不再计算第二个表达式,例如,对于if(str!=null&&!str.equals("")),当str为null的时候后面的表达式不会执行,所以不会出现NullPointer原创 2017-04-21 14:31:57 · 733 阅读 · 0 评论 -
java.util.Date和java.sql.Date的区别和相互转化
Java.util.Date是在除了SQL语句的情况下面使用的。java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分它们都有getTime方法返回毫秒数,自然就可以直接构建。 java.util.Date 是 java.sql.Date 的父类,前者是常用的表示时间的类,我们通常格式化或者得到当前时间都是用他,后者之后在读写数据库的时候用他,因为PreparedSt转载 2016-06-08 11:06:25 · 1169 阅读 · 0 评论 -
Java中的Reference
在 jdk 1.2及其以后,引入了强引用、软引用、弱引用、虚引用这四个概念。网上很多关于这四个概念的解释,但大多是概念性的泛泛而谈,今天我结合着代码分析了一下,首先我们先来看定义与大概解释(引用类型在包java.lang.ref 里)。 1、强引用(StrongReference) 强引用不会被GC回收,并且在java.lang.ref里也没有实际的对应类型。举个例子来说:原创 2016-06-01 17:14:47 · 273 阅读 · 0 评论 -
java使double保留两位小数的多方法 java保留两位小数
代码如下:mport java.text.DecimalFormat; DecimalFormat df = new DecimalFormat("######0.00"); double d1 = 3.23456 double d2 = 0.0;double d3 = 2.0;df.format(d1); df.format(d2); d转载 2016-05-26 18:48:04 · 988 阅读 · 2 评论 -
AtomicInteger简介
这个类真的非常实用,更重要的是 它确实非常简单:附上自己的代码,可以自己试试:AtomicInteger,一个提供原子操作的Integer的类。在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。 代码:package test;import jav原创 2016-04-29 16:00:35 · 600 阅读 · 0 评论