Java
王哲晓 tiger
没有高深的知识,没有进阶的技巧,万丈高楼平地起!
展开
-
Import常规导入和静态导入详解
一、Import常规导入方式 如果我们要使用其他包的类,需要使用import导入,从而可以在本类中直接通过类名来调用,否则就需要书写类的完整包名和类名。import后,便于编写代码,提高可维护性。注意要点: 1.Java会默认导入java.lang包下所有的类,因此这些类我们可以直接使用。 2.如果导入两个同名的类,只能用包名+类名来显示调用相关类。如下示例代码:java.util.Date date = new java.util.Date(...原创 2021-01-07 21:21:24 · 908 阅读 · 0 评论 -
Java深拷贝和浅拷贝的区别
本文部分内容参考自:https://www.cnblogs.com/lgxblog/p/11568153.html浅拷贝:被拷贝(复制)的对象的所有的属性都与原对象有相同的值,且所有的对象引用仍然指向原来的对象。package com.design.clone;public class Experience implements Cloneable{ private...原创 2020-01-09 15:14:01 · 568 阅读 · 0 评论 -
LocalDateTime、LocalDate、LocalTime与Date对比
Java8以前,我们一直长期使用Date和Calendar来处理时间,而在使用Date处理日期时间问题上会存在一定的隐患,产生线程不安全的问题,最典型的就是在一定负载并发量的情况下使用SimpleDateFormat引发的线程安全性问题。如今Java8提供了LocalDate、LocalTime、LocalDateTime三个日期时间类,在安全性和操作性上对比Date和Calendar非常可观,...原创 2019-12-18 16:43:20 · 9900 阅读 · 0 评论 -
Java 自定义注解
直接切入正题,下面我们自定义一个注解Entity,并通过Entity注解动态获取指定类的映射表进行数据查询(本案例只作为演示,所以比较简要),请看代码:1、定义一个Java注解Entitypackage com.tyyd.anno;import java.lang.annotation.ElementType;import java.lang.annotation.Retent...原创 2019-10-18 07:19:42 · 290 阅读 · 0 评论 -
JAVA常量类的实现方式_枚举类_项目实践
前言众所周知,系统里有很多比如订单状态、审核状态;性别、结算方式、交易类型等属性,这些属性只有几个值,一般用0、1、2、3等的数字标识存入数据库,每次对这些属性所属对象的增删改操作,都会在代码里给状态设置值,由于项目是多人开发的,如果每次设置值的时候都直接set 0、1、2,容易出错,而且状态假设不用0、1、2表示了,用1、2、3表示,这时候所有set状态的地方都得改变,维护麻烦。所以用常量...转载 2019-07-19 17:47:03 · 225 阅读 · 0 评论 -
Java 和 HTTP 的那些事(二) 使用代理
在上一篇博客《模拟 HTTP 请求》中,我们分别介绍了两种方法来进行 HTTP 的模拟请求:HttpURLConnection和HttpClient,到目前为止这两种方法都工作的很好,基本上可以实现我们需要的 GET/POST 方法的模拟。对于一个爬虫来说,能发送 HTTP 请求,能获取页面数据,能解析网页内容,这相当于已经完成 80% 的工作了。只不过对于剩下的这 20% 的工作,还得花费...转载 2019-08-06 09:40:39 · 598 阅读 · 1 评论 -
java中形如yyyy-MM-dd'T'HH:mm:ss.SSSZ 转化成各种格式的问题
yyyy-MM-dd’T’HH:mm:ss.SSSZ后面的三个SSS指的是毫秒,Z代表的时区,中间的T代表可替换的任意字符。@Testpublic void testTime() throws ParseException{ Date date = new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyy-...转载 2019-08-19 14:25:57 · 11221 阅读 · 1 评论 -
处理ip,java判断ip是否在指定的ip段范围内,给定的ip地址是否在某个ip段范围内,将字符串形式IP地址转换long类型
public class IPUtils { /** * 将字符串形式IP地址127.0.0.1转换10234564321 * * @param strIP * @return */ public static long ip2Long(String strIP) { long[] ip = new long[4...转载 2019-08-30 16:39:52 · 1894 阅读 · 0 评论 -
Java编程Retry重试机制实例详解
目录1、业务场景 2、常规解决方案演化 1)try-catch-redo简单重试模式: 2)try-catch-redo-retry strategy策略重试模式: 3、优雅重试方案尝试: 1)应用命令设计模式解耦正常和重试逻辑: 2)spring-retry 规范正常和重试逻辑 3)guava-retryer 分离正常和重试逻辑 总结本文研究的主要是Java编...转载 2019-09-11 15:53:42 · 626 阅读 · 0 评论 -
获取当前系统UTC时间戳
摘要:在日常的开发过程中,我们经常会遇到很多关于时间格式化、字符串截取等等相关的一些基本功能逻辑,本人也不例外。每当遇到此类问题,以往总会不停地百度查阅别人的博客,会浪费特别多的时间。因此,现阶段每遇到一项此类问题,通过自身的实践后,我都会书写博客。写博客的好处显而易见,每当自身遇到的问题通过实践总结后印象会比较深刻,日后再有需要可以重新翻看自身博客,另外通过展示自身的博客,可以吸纳他人好的建议...原创 2019-09-23 17:09:58 · 7293 阅读 · 0 评论 -
Volatile关键字实现原理
1、认识Volatile关键字2、机器硬件CPU与JMMpublic class ReaderAndUpdater { final static int MAX = 50; static int init_value = 0; public static void main(String[] args) { new Thread(() ->...原创 2019-06-28 11:15:00 · 211 阅读 · 0 评论 -
CAS和AQS
锁:封锁。悲观锁:写(增删改)多,读(查)少 Lock乐观锁:读(查)多,写少 版本控制1、CAS(Compare And Set或者Compare And Swap)概念:一种无所的原子算法,乐观锁。思想:给你一个期望值,与你现有的值比较,如果相等再修改,不相等什么事情都不做。CAS(V,E,N) V是目前拿到的值,E是期望值,N是要修改的值。作用和优点:实现稍微复杂...原创 2019-06-24 22:44:32 · 741 阅读 · 0 评论 -
线程池
前段时间遇到这样一个问题,有人问微信朋友圈的上传图片的功能怎么做才能让用户的等待时间较短,比如说一下上传9张图片,我说这还不简单,我们项目中就有,直接串行依次往服务器上传就好啊。然而,这并不是最优方案,其实我们可以通过线程池的用法,来开启多个线程同时处理上传的任务。这样如果网络带宽允许的情况下,那么这种方式一定会比串行的效率更高,其实这样的场景很常见,只是平时我们没加注意罢了,下面就来介绍一下线...转载 2019-06-26 15:36:08 · 131 阅读 · 0 评论 -
Java多线程创建的三种方式与对比
一、继承Thread类创建线程类1、定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体代表了线程需要完成的任务,即线程的执行体。2、创建Thread子类的实例,即创建线程对象。3、调用线程对象的start()方法来启动该线程。// 通过继承Thread类来创建线程类public class FirstThread extends Thread {...原创 2018-09-23 18:11:41 · 183 阅读 · 0 评论 -
Java线程间通信实现
本文源自微信公众号Java知音 http://wingjay.com author:wingjay正常情况下,每个子线程完成各自的任务就可以结束了。不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了。本文涉及到的知识点:1. thread.join(),2. object.wait(),3. object.notify(),4. Countd...转载 2018-10-08 11:48:09 · 163 阅读 · 0 评论 -
Java中String,StringBuilder和StringBuffer的区别
这三个类的主要区别在两个方面:运算速度(运算性能或执行效率)和线程安全性。1、运算速度比较(通常情况下):StringBuilder > StringBuffer > StringString是final类不能被继承且为字符串常量,而StringBuilder和StringBuffer均为字符串变量。String对象一旦创建便不可更改,而后两者是可更改的,它们只能通过构造函数来...原创 2018-10-08 19:18:54 · 30515 阅读 · 10 评论 -
IDEA调试常用快捷键
1、F8 单步调试,不进入函数内部2、F7 单步调试,进入函数内部3、Shift+F7 选择要进入的函数4、Shift+F8 跳出函数5、Alt+F9 运行到断点6、Alt+F8 执行表达式查看结果7、F9 继续执行,进入下一个断点或执行完程序8、Ctrl+F8 设置/取消当前行断点9、Ctrl+Shift+F8 查看断点 ...原创 2018-10-21 19:52:47 · 36037 阅读 · 3 评论 -
JVM结构与Java内存模型
待完善一、JVM结构:1、方法区(信息共享):类信息、常量、Static变量、JIT编译的代码 反射正是在方法区加载的2、堆(信息共享):实例对象 (会内存溢出OOM)3、VM stack:Java方法在运行的内存模型(结构)——栈帧,每一个方法都有一个对应的栈帧。其内部存放方法的私有数据。包括局部变量、引用类型数据的地址、操作数栈。以上数据只有该方法能够访问。(会内存溢出...原创 2018-10-26 22:02:07 · 283 阅读 · 0 评论 -
Java并发专题——Synchronized
案例:并发叫号,并发量比较大的时候会出现:跳号、重号、超过最大值。一、概念是利用锁的机制来实现同步的。锁机制有如下两种特性:互斥性:即在同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程中的协调机制,这样在同一时间只有一个线程对需同步的代码块(复合操作)进行访问。互斥性我们也往往称为操作的原子性。可见性:必须确保在锁被释放之前,对共享变量所做的修改,对...原创 2019-03-29 16:43:07 · 145 阅读 · 0 评论 -
java中native关键字的详解
概述: java语言是运行在虚拟机上的,java又是不允许直接访问硬件的(也就是java安全性的体现),而java想要做一些例如绘图、画线之类的要去操作硬件的事情的话,必然要用到底层一些的调用。这就引出了native的关键字。1.native用在类的method前面,表示这个method不是用java实现的。2. native是一个用来修饰方法的关键字!用它修饰的方法,在虚拟机里都有...转载 2019-05-31 12:25:59 · 508 阅读 · 0 评论 -
浅谈Java中的hashcode方法
作者:海子出处:http://www.cnblogs.com/dolphin0520/本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。转载 2019-05-31 15:07:30 · 106 阅读 · 0 评论 -
Java集合类
一、集合概述集合类不同于数组,只能保存对象(即对象的引用变量),Java集合类大致可分为Set、List、Queue、Map四种体系,派生于Collection和Map两个接口。各集合大类主要区别如下:1. Set代表无序、不可重复的集合2. List代表有序、可重复的集合3. Map具有映射关系的集合4. Queue代表队列集合二、Set集合Set集合有HashSet...原创 2018-09-17 13:02:19 · 169 阅读 · 0 评论