java
老王爱敲代码
专注方能成就未来
展开
-
实用小工具-获取http请求中的IP地址
import org.apache.commons.lang3.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import javax.servlet.http.HttpServletRequest;import static com.enn.common.constants.Constant.X_FORWARDED_FOR_UNKNOWN;/** * @author wms * @date 20..原创 2022-02-15 14:57:11 · 1055 阅读 · 0 评论 -
日常总结-Java的日期操作
1、获取当天的0点和23:59:59 999,以此类推,可以获取任何时刻。 public static Calendar beginOfDay(Calendar calendar) { calendar.set(11, 0); calendar.set(12, 0); calendar.set(13, 0); calendar.set(14, 0); return calendar; } public s原创 2022-01-28 21:36:16 · 1309 阅读 · 0 评论 -
实用工具类:日期常用方法-获取两个日期之间的所有日期
/** * 获取两个日期之间的所有日期 * @param start * @param end * @return */ public static List<Date> getBetweenDays(Date start, Date end) { List<Date> result = new ArrayList<>(); Calendar tempStart = Calend..原创 2021-11-04 21:23:24 · 338 阅读 · 0 评论 -
实用工具类:日期常用方法-获取本周周一
import java.util.Calendar; public static Date getThisWeekMonday(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); // 获得当前日期是一个星期的第几天 int dayWeek = cal.get(Calendar.DAY_OF_WEEK); if (...原创 2021-11-04 21:21:36 · 352 阅读 · 0 评论 -
控制线程顺序的两种简易方法
1、利用线程的join方法,暂停正在运行的线程,执行调用join的线程。强制参与进来。 private static void testMethod1(){ Thread threadA = new Thread(() -> System.out.println("A")); Thread threadB = new Thread(() -> System.out.println("B")); Thread threadC = new Thr原创 2021-05-15 23:03:20 · 259 阅读 · 0 评论 -
java复习十:jdk8新特性lambda表达式
package com.example.demo;import java.util.Arrays;import java.util.IntSummaryStatistics;import java.util.List;import java.util.function.Predicate;import java.util.stream.Collectors;/** * java...原创 2020-03-28 16:53:06 · 185 阅读 · 1 评论 -
java复习九:== 与 equals
一、先说明区别== : 作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。ps:(基本数据类型==比较的是值,引用数据类型==比较的是内存地址)equals() : 作用也是判断两个对象是否相等。但它一般有两种使用情况:情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。情况2:类覆盖了 equal...原创 2020-02-17 11:18:56 · 243 阅读 · 0 评论 -
Java复习八:Object类的常见方法总结
//native方法,用于返回当前运行时对象的Class对象,使用了final关键字修饰,故不允许子类重写。public final native Class<?> getClass()//native方法,用于返回对象的哈希码,主要使用在哈希表中,比如JDK中的HashMap。public native int hashCode() //用于比较2个对象的内存地址是否相等,...原创 2020-02-17 10:48:38 · 220 阅读 · 0 评论 -
java复习七:获取用键盘输入的两种方法
方法1:通过 ScannerScanner input = new Scanner(System.in);String s = input.nextLine();input.close();方法2:通过 BufferedReaderBufferedReader input = new BufferedReader(new InputStreamReader(System...原创 2020-02-17 10:27:13 · 192 阅读 · 1 评论 -
java复习六:如何向文件File尾部追加内容?
问题:如何向文件尾部追加内容?说明:默认添加数据到文件开头位置。三种方式:字节输出流,字符输出流,随机访问文件流1、字节输出流创建输出流,构造函数第二个参数设置为ture下图源码注释翻译:append为true,写入的数据会添加到文件尾部而不是文件开始位置。...原创 2020-02-14 12:28:20 · 1837 阅读 · 2 评论 -
Java复习五:字符串常量池
字符串的分配和其他对象分配一样,是需要消耗高昂的时间和空间的,而且字符串我们使用的非常多。JVM为了提高性能和减少内存的开销,在实例化字符串的时候进行了一些优化:使用字符串常量池。每当我们创建字符串常量时,JVM会首先检查字符串常量池,如果该字符串已经存在常量池中,那么就直接返回常量池中的实例引用。如果字符串不存在常量池中,就会实例化该字符串并且将其放到常量池中。由于String字符...原创 2020-02-14 11:04:29 · 160 阅读 · 0 评论 -
Java复习四:关于switch
switch(表达式)中表达式的返回值必须是下述几种类型之一:byte,short,char,int,枚举,String(jdk1.7);不能是long类型关注:哪种类型不能作为表达式!!原因?long类型。因为switch实际上只是支持int类型,4个字节长度。byte,short,char,int,枚举,String都可以转换成int类型,但是long类型精度是8个字节,转换时会有...原创 2020-02-14 10:51:55 · 243 阅读 · 0 评论 -
Java复习三:关于类的作用域
关注:protected与default的区别前者作用范围比后者多出外包子孙类原创 2020-02-14 10:45:48 · 160 阅读 · 0 评论 -
Java复习二:final关键字
Final可以修饰类,变量,方法1、final类Final类不能被继承,其中的成员变量可以根据需要设置成final,但是其中的方法都会被隐式的指定为final方法。2、final方法final方法在子类继承时候不能被重写3、final变量final变量,若是基本数据类型的变量,则在初始化之后不能再修改,若是引用类型,则在初始化之后不能再指向另一个对象。...原创 2020-02-14 10:43:27 · 118 阅读 · 0 评论 -
Java复习一:静态语法
静态使用场景:静态变量,静态方法,静态代码块,静态内部类1、静态变量静态变量与非静态变量的区别是:静态变量被所有对象共享,在内存中只有一个副本,仅仅在类初次加载的时候被初始化,非静态变量是对象拥有的,在创建对象的时候被初始化的,存在多个副本,各个副本之间独立。2、静态方法由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然...原创 2020-02-14 10:42:01 · 203 阅读 · 0 评论 -
java后台注销cookie的实现方案
后台登录退出功能,注销cookie的实现方法,新建一个同样key的cookies,value为null,age为0,相同path。 Cookie cookie = new Cookie("ezSafe_user",null); cookie.setMaxAge(0); cookie.setPath(request.getContextPath(...原创 2019-04-26 17:14:41 · 4270 阅读 · 0 评论 -
2019年春季java工程师面试题总结(亲历)
一、java方面1、javaweb方面,三大组件2、lambad表达式用途,优点3、set防止重复的策略4、枚举的遍历5、向上转型,向下转型6、反射机制7、动态代理机制8、线程池实现原理,配置参数9、 jvm:64位jvm int的范围,g1,cms垃圾收集器原理,垃圾收集算法及其优缺点,java内存模型。11、jvm client模式和server模式12、synchron...原创 2019-04-26 11:29:06 · 366 阅读 · 0 评论 -
G1垃圾收集器原理过程学习
G1全称Garbage First。是当前收集器技术发展最前沿成果之一。GC算法:标记整理概念:分区regionG1收集器将整个java堆分成很多大小相同的region,新生代和老年代不再是物理隔阂,而是部分region的集合。处理过程:初始标记-并发标记-最终标记-筛选回收1、初始标记仅仅是标记GC Roots能直接关联的对象,速度很快。stop the word...原创 2019-04-09 15:25:13 · 2619 阅读 · 0 评论 -
java设计模式之建造者模式
建造者模式:一、定义:将复杂对象的构建过程与其表示分离,使得同样的构建过程可以产生不同的表现形式。二、优点:解耦,使得复杂对象的创建过程更加清晰,可以根据需求适当调整各部件顺序。扩展具有相同组件,组件顺序不同的产品很方便,只需要在指挥者中修改代码。。三、缺点:需要有很多相同的组件,范围受限。如果产品组件内部变化很大,则需要实现很多具体建造者,使得系统变得很大。 四、涉及角色: ...原创 2018-11-13 11:48:45 · 284 阅读 · 0 评论 -
java设计模式之抽象工厂模式
上一节讲了工厂模式,这一节是抽象工厂模式。抽象工厂模式是对工厂模式的抽象,扩展工厂类别,增加产品类别,创建抽象工厂。通过工厂生成器生成相应的工厂,再生成具体产品。package com.wms.abstractFactoryPattern;public interface Book { void look();}package com.wms.abstractFac...原创 2018-11-12 11:05:38 · 151 阅读 · 0 评论 -
java设计模式之原型模式
原型模式定义:通过原型实例指定需要创建的对象类型,并通过拷贝这些原型对象创建新的对象。原型模式主要用于对象的复制,它的核心是原型类Prototype。Prototype类需要具备以下两个条件:实现Cloneable接口。Cloneable接口,其作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,...原创 2018-11-14 10:42:12 · 153 阅读 · 0 评论 -
Jvm的垃圾回收机制到底会不会回收掉长时间不用的单例模式对象?
在w3cschool看到一篇很好的帖子,收藏。Jvm的垃圾回收机制到底会不会回收掉长时间不用的单例模式对象转载 2018-11-14 11:22:31 · 537 阅读 · 0 评论 -
java设计模式之单例模式
列举5种单例模式的实例,从实例代码中感受单例模式的魅力。第一种,懒汉式 ,实现简单,但是线程不安全package com.wms.singleton;/** * @date:2018/11/12 * @desc: //懒汉式 线程不安全 */public class Singleton { private static Singleton instance; ...原创 2018-11-12 14:19:48 · 130 阅读 · 0 评论 -
java设计模式之适配器模式(Adapter Pattern)
适配器模式适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。实例:MP3播放器可以播放MP3格式的文件,MP4播放器可以播放MP4格式的文件,我们想实现MP4播放器既可以播放MP4也可以播放MP3格式文件。通过adapter类,实现...原创 2018-11-14 16:36:17 · 195 阅读 · 0 评论 -
针对谷歌浏览器中,点击图片超链接实现下载而不是预览,解决办法
针对某些浏览器,比如谷歌浏览器,在超链接a标签中给出图片url,点击a标签不是期望的下载而是预览,采用以下办法可以解决。 //图片url imgDownload: function (url, filename) { var browserIsIe = this.browserIsIe(); if (browserIsIe)...原创 2018-12-07 14:07:43 · 16257 阅读 · 2 评论 -
java实用方法:ip和int互相转换
项目中用到的实用方法,ip转成int和int转成ip:public class IPUtil { public static void main(String[] args) { IPUtil ipInt = new IPUtil(); System.out.println(ipInt.ipToInt("127.0.0.1")); ...原创 2019-03-21 15:23:55 · 3851 阅读 · 1 评论 -
为什么java集合在初始化时建议设置初始大小?
在知乎上看到一篇文章说的很好:《阿里巴巴java手册》存疑:initialCapacity转载 2019-03-30 11:04:56 · 1900 阅读 · 0 评论 -
java线程池原理解析(1)
线程池的好处不必多说,ThreadPoolExecutor是个很关键的类,今天分析一波:1、通过源码构造器观察其配置 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long kee...原创 2019-03-23 13:47:46 · 154 阅读 · 0 评论 -
java关于list集合做删除操作时的坑
一个ArrayList在做删除操作时,如果你使用如下方式,会有什么问题?import java.util.ArrayList;import java.util.List;public class DeleteList { public static void main(String[] args) { List<Integer> list = new ArrayLis...原创 2019-03-31 21:10:39 · 1710 阅读 · 0 评论 -
查看java class文件的两种方法
下图是实例java文件:首先通过javac编译文件生成class文件。查看class文件的两种方法:1、通过16进制编辑器winhex。直接将生成的class文件丢进工具。这种方式。可以清楚的看到每个字节的内容,比如前四个字节的魔术,接着4个字节的版本信息,然后是常量池部分。2、通过jdk自带的javap方法查看经过计算的class文件:命令:javap -ve...原创 2019-04-10 16:53:22 · 19872 阅读 · 0 评论 -
JVM优化技术之逃逸分析与锁消除学习记录
一、逃逸分析逃逸分析是java虚拟机比较前言的优化技术。它并不是直接的优化技术的手段,而是为其他优化技术手段提供依据。逃逸分析,主要是分析对象的动态作用范围,比如在一个方法里一个对象创建后,在调用外部方法时,该对象作为参数传递到其他方法中,成为方法逃逸;当被其他线程访问,如赋值给其他线程中的实例变量,则成为线程逃逸。如果可以证明一个对象不会出现方法或者线程逃逸,也就是说别的方法或者线程...原创 2019-04-10 17:40:41 · 340 阅读 · 0 评论 -
java中怎么判断对象已死?
1、引用计数法引用计数是最简单直接的一种方式,这种方式在每一个对象中增加一个引用的计数,这个计数代表当前程序有多少个引用引用了此对象,如果此对象的引用计数变为0,那么此对象就可以作为垃圾收集器的目标对象来收集。优点:简单,直接,不需要暂停整个应用缺点:1.需要编译器的配合,编译器要生成特殊的指令来进行引用计数的操作;2.不能处理循环引用的问题因此这种方法是垃圾收集的早期策略,现在很...原创 2019-04-08 16:54:49 · 482 阅读 · 0 评论 -
CMS垃圾收集器原理过程学习
CMS全称Concurrent Mark Swap ,并发标记清除。是一种以获取最短回收停顿时间为目标的收集器。使用的GC算法:标记-清除处理过程:初始标记~并发标记~重新标记~并发清除从图中可见,初始标记和重新标记阶段“stop the word”,需要暂停所用用户线程,但是时间短。而并发标记和并发清除可以和用户线程一起工作,耗时较多。1、初始标记初始标记阶段,...原创 2019-04-09 14:48:00 · 509 阅读 · 1 评论 -
java设计模式之工厂模式
工厂设计模式优点:1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。3、屏蔽产品的具体实现,调用者只关心产品的接口。工厂设计模式缺点:增加一个产品,就要增加一个具体实现类和修改工厂类,增加代码的复杂度。 package com.wms.factoryPattern;public interface ...原创 2018-11-07 16:56:48 · 140 阅读 · 0 评论