Java
文章平均质量分 77
老周聊架构
微信公众号:老周聊架构
展开
-
Mac 系统同时安装两个不同版本的 JDK
一、JDK 下载1.1 JDK8 版本链接: https://pan.baidu.com/s/1t6DIpwHYzxNlWNziFqZu7w 提取码: yg5z1.2 JDK11 版本链接: https://pan.baidu.com/s/1N041S_aOauHlQe30UWgYiA 提取码: gk9p二、编辑配置文件编辑配置文件:vim ~/.bash_profile2.1 新增 JAVA_HOME 路径JAVA_8_HOME=/Library/Java/JavaVirtualM原创 2021-10-09 00:38:55 · 1228 阅读 · 1 评论 -
HttpClient、okhttp和RestTemplate的区别
一、HttpClient1、pom依赖<!--HttpClient--><dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version></dependency>2、HttpClient代码实现p原创 2020-10-19 21:13:30 · 6650 阅读 · 0 评论 -
平衡树和二叉树的区别
一、平衡二叉树(AVL树)1、概念AVL树是带有平衡条件的二叉查找树,一般是用平衡因子差值判断是否平衡并通过旋转来实现平衡,左右子树树高不超过1,和红黑树相比,AVL树是严格的平衡二叉树,平衡条件必须满足(所有节点的左右子树高度差不超过1)。不管我们是执行插入还是删除操作,只要不满足上面的条件,就要通过旋转来保持平衡,而旋转非常耗时的,由此我们可以知道AVL树适合用于插入与删除次数比较少,但查找多的情况。2、局限性由于维护这种高度平衡所付出的代价比从中获得的效率收益还大,故而实际的应用不多,更多的地原创 2020-09-25 22:23:33 · 3691 阅读 · 0 评论 -
请说说你对线程安全的理解
其实博主之前面试也有被问到这个问题,当时我用自己的语言组织回答的,我觉得当时回答的不够严谨。现在我查阅了相关资料做了以下的总结。《深入理解Java虚拟机》第二版 周志明著 Page386页有相关定义。周志明也是引用的别人的定义,我这里贴出来。笔者认为《Java Concurrency In Partice》的作者 Brian Goetz 对 “线程安全” 有一个比较恰当的定义:“当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他原创 2020-09-19 20:36:17 · 1834 阅读 · 0 评论 -
HashMap存1000条数据,构造时传多少才能让HashMap不需要动态扩容?
一、HashMap 的初始化关于HashMap 的初始化,可以参考我们上一篇说过:JDK8中的HashMap初始化和扩容机制二、HashMap 的 table 初始化这个问题也可以这样问,HashMap存1000条数据,构造时传1000会不会让HashMap动态扩容?回到 HashMap 的构造方法,threshold 为扩容的阈值,在构造方法中由 tableSizeFor() 方法调整后直接赋值,所以在构造 HashMap 时,如果传递 1000,threshold 调整后的值确实是 1024,但原创 2020-09-19 17:53:13 · 3809 阅读 · 0 评论 -
JDK8中的HashMap初始化和扩容机制
一、HashMap初始化方法HashMap() 不带参数,默认初始化大小为16,加载因子为0.75;HashMap(int initialCapacity) 指定初始化大小;HashMap(int initialCapacity, float loadFactor) 指定初始化大小和加载因子大小;HashMap(Map<? extends K,? extends V> m) 用现有的一个map来构造HashMap。二、分析初始化过程1、初始化代码测试用例Map<Str原创 2020-09-19 14:03:36 · 2075 阅读 · 3 评论 -
String s = new String()分析各个场景创建了几个堆和栈
场景1:String str1 = “abc”;System.out.println(str1 == “abc”);步骤:栈中开辟一块空间存放引用str1String池中开辟一块空间,存放String常量”abc”引用str1指向池中String常量”abc”str1所指代的地址即常量”abc”所在地址,输出为true场景2:String str2 = new String(“abc”);System.out.println(str2 == “abc”);步骤:栈中开辟一块原创 2020-09-13 17:06:02 · 960 阅读 · 0 评论 -
INSERT ... ON DUPLICATE KEY UPDATE ... 批量插入与更新(存在则更新,不存在则插入)
一、前言作为后台开发,相信大家在做业务开发时,经常会遇到这样的场景。那就是数据库没有该数据的话就做插入操作,有的话就做更新操作。方法1:遍历集合,判断里面的对象是否存在存在则单个update,不存在则单个insert。这样的逻辑看着貌似没问题,其实问题大着呢。要是数据量多的话,你哟一个个判断,一个个执行update或者insert操作,这样频繁操作数据库的话,性能影响超级大,直接会超时。所以...原创 2020-03-06 17:12:41 · 6038 阅读 · 0 评论 -
Java如何优雅的处理插入数据,数据库有相同的数据则更新,没有的话则插入
一、前言相信小伙伴们在做后台开发的时候,经常要用到CRUD。经常用CRUD并不丢人,关键是怎么把CRUD用到更简洁、更极致,这样的一直下去的话,其实你慢慢的也成为了你眼中的那些大神们。我这里是用到了 JDK1.8的一些特性,不了解 JDK1.8的新特性的话,可以先简单了解一下。好了,废话不多说,我直接上代码了。二、代码实现package com.riemann.springbootdemo...原创 2020-02-14 22:15:32 · 2541 阅读 · 2 评论 -
json怎么解析混合数组对象到实体类的list集合里去
一、前言这次项目中遇到了一个这样的需求,把下面数据解析到我下面的对象里去。json 文件[ { "categories": [ "美食,小吃快餐" ], "coordinate": { "address": "王府井大街138号新东安广场3层328", "area"...原创 2020-01-07 00:55:11 · 2378 阅读 · 0 评论 -
Java正则表达式实现经纬度的合法性
经度: -180.0~+180.0(整数部分为0~180,必须输入1到5位小数)正则表达式:/^[\-\+]?(0?\d{1,2}\.\d{1,5}|1[0-7]?\d{1}\.\d{1,5}|180\.0{1,5})$/纬度: -90.0~+90.0(整数部分为0~90,必须输入1到5位小数)正则表达式: /^[\-\+]?([0-8]?\d{1}\.\d{1,5}|90\.0{1,5}...原创 2020-01-03 21:55:30 · 4989 阅读 · 7 评论 -
Java经典基础面试题,你会几道?(2)
下面这道题介绍下Arrays.asList(),在平时开发中还是比较常见的,我们可以使用它将一个数组转换为一个List集合。先上题:int[] myArray = {1, 2, 3};List myList = Arrays.asList(myArray);System.out.println(myList.size());System.out.println(myList.get(0)...原创 2019-07-03 00:12:40 · 463 阅读 · 0 评论 -
Java经典基础面试题,你会几道?(1)
1、==符号的使用 Integer a = 1000,b=1000; Integer c = 100,d=100; System.out.println(a==b); System.out.println(c==d);如果这道题你能得出正确答案,并能了解其中的原理的话。说明你基础还可以。如果你的答案 是 true 和true的话,你的基础就有所欠缺了。首先公布下答案, 运行代码,我们...原创 2019-07-01 23:28:00 · 481 阅读 · 2 评论 -
Spring的几个经典常见面试题
一、什么是 Spring 框架?Spring 是一种轻量级开发框架,旨在提高开发人员的开发效率以及系统的可维护性。Spring 官网:https://spring.io/。我们一般说 Spring 框架指的都是 Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。这些模块是:核心容器、数据访问/集成,、Web、AOP(面向切面编程)、工具、消息和测试...原创 2019-06-01 01:03:37 · 26507 阅读 · 5 评论 -
StringEntity 和 UrlEncodedFormEntity 的区别
一、UrlEncodedFormEntity//设置请求方式与参数URI uri = new URI(uriStr);HttpPost httpPost = new HttpPost(uri);httpPost.getParams().setParameter("http.socket.timeout", new Integer(500000));httpPost.setHeader("...原创 2019-05-29 00:32:12 · 1168 阅读 · 0 评论 -
Calendar获取当前时间的性能比较
除了获取时间用Date和SimperFormat,还可用Calendar类方法获取时间。一、Calendar 类常用的获取时间以及时区的方法:Calendar calendar = Calendar.getInstance();System.out.println("目前时间: " + calendar.getTime());System.out.println("Calendar时区: ...原创 2019-05-28 23:42:18 · 1932 阅读 · 0 评论 -
源码解读之(三)CopyOnWriteArrayList
一、概念CopyOnWriteArrayList是Java并发包中提供的一个并发容器,它是个线程安全且读操作无锁的ArrayList,写操作则通过创建底层数组的新副本来实现,是一种读写分离的并发策略,我们也可以称这种容器为"写时复制器",Java并发包中类似的容器还有CopyOnWriteSet。本文会对CopyOnWriteArrayList的实现原理及源码进行分析。我们都知道,集合框架中的...原创 2019-05-24 01:11:52 · 314 阅读 · 0 评论 -
webservice接口与HTTP接口的使用以及区别
一、webservice 的概念Web 是使应用程序可以与平台和编程语言无关的方式进行相互通信的一项技术。Web 服务是一个软件接口,它描述了一组可以在网络上通过标准化的 XML 消息传递访问的操作。它使用基于 XML 语言的协议来描述要执行的操作或者要与另一个 Web 服务交换的数据。一组以这种方式交互的 Web 服务在面向服务的体系结构(Service-Oriented Architectu...原创 2019-05-31 00:24:08 · 19066 阅读 · 0 评论 -
null != string 和 string != null 的l区别
在项目经常看到 null != string 的写法,感觉跟 string != null 没啥区别。于是自己测试了下确实没啥区别,都能按照正常应有的逻辑来执行。然后查看了下jdk源码,源码中居然没有 null != string 的写法,全是 string != null 的写法。按照我的理解:null的话系统不需要检索它就是个null,而后面"riemannchow"很长的String,...原创 2019-05-23 23:36:09 · 1771 阅读 · 0 评论 -
Java获取真实ip以及判断ip是否在指定范围
我们平时请求一些资源,对客户端和服务器的域名和ip应该再熟悉不过了;前台地址栏域名请求资源,域名会通过DNS解析器把域名解析成ip,但有时候我们后台得到不止一个ip,这是因为加了类似有反向代理功能的nginx,所以我们要得到真实的ip,自己要在后台做逻辑校验即可。1、获取真实ip下面来看Java获取真实ip的代码:/** * 获取真实的IP * @param request * @re...原创 2019-08-11 16:35:15 · 3662 阅读 · 2 评论 -
Jackson库中objectMapper的使用
ObjectMapper类是Jackson库的主要类。它提供一些功能将转换成Java对象与SON结构互相转换,在项目中遇到过,故记录一下。在 pom.xml 加入依赖<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-da...原创 2019-05-27 23:57:49 · 2103 阅读 · 0 评论 -
static 关键字用法总结
一、static 关键字的含义static是Java50个关键字之一。static关键字可以用来修饰代码块表示静态代码块,修饰成员变量表示全局静态成员变量,修饰方法表示静态方法。(注意:不能修饰普通类,除了内部类,这是为什么?)class A { static { System.out.println("A : 静态代码块"); } static int i ; // 静态变量...原创 2019-06-24 23:57:05 · 2059 阅读 · 0 评论 -
全局变量、成员变量、类变量、静态变量、实例变量、局部变量的定义与区别
全局变量全局变量又叫成员变量,它是声明在类里,函数,静态语句块外的变量,全局变量又分为类变量(静态变量)、实例变量两种.通过代码来看一下:private inti;//实例变量private static int j;//类变量实例变量总是通过对象来访问,因为它们的值在对象和对象之间有所不同。而由static修饰的类变量(静态变量)在类装载的时候就会被初始化,也就是说一处修改多处改变....原创 2019-06-28 00:07:07 · 4418 阅读 · 2 评论 -
描述Java动态代理的几种实现方式,分别说出相应的优缺点。
AOP的拦截功能是由java中的动态代理来实现的。说白了,就是在目标类的基础上增加切面逻辑,生成增强的目标类(该切面逻辑或者在目标类函数执行之前,或者目标类函数执行之后,或者在目标类函数抛出异常时候执行。不同的切入时机对应不同的Interceptor的种类,如BeforeAdviseInterceptor,AfterAdviseInterceptor以及ThrowsAdviseIntercepto...原创 2019-02-09 23:52:09 · 12115 阅读 · 2 评论 -
Java中a+=b和a=a+b有什么区别
这是一道常见的经典Java基础面试题,主要考察的是运算时精度问题。1、a+=b 形式package com.test;/** * @author riemann * @date 2019/10/09 17:47 */public class AccuracyTest { public static void main(String[] args) { sho...原创 2019-10-09 18:16:53 · 768 阅读 · 0 评论 -
Java反射怎么调用静态(私有)方法和非静态(私有)方法
在一个类中声明一个静态方法、非静态方法、私有静态方法和私有非静态方法。public class StaticAndNoStaticTest { public static void staticMethod(String[] args) { for (String str : args) { System.out.println(str); } } ...原创 2019-09-14 16:35:41 · 11020 阅读 · 0 评论 -
Java校验时间是否为yyyyMMddHHmmss格式
之前我写过校验时间的博文,Java判断时间格式是否为yyyyMMddHHmmss的合法格式但感觉是原生的,感觉复杂了,今天刚好又碰到了这个需求,把它简化了并记录之。/** * 校验时间是否为 yyyyMMddHHmmss 格式 * @param str * @return */public static boolean checkDateTime(String str) { ...原创 2019-09-07 00:58:18 · 3524 阅读 · 2 评论 -
Java中两个long类型进行相加运算,值溢出的解决方法
博主在项目中遇到了这个需求,开始用的int类型进行运算,字段是存的字节,然后后台进行相应的逻辑运算返回给前台,前台来转化成GB。大家都知道1GB=1024MB,1MB=1024KB,1KB=1024Byte,所以1GB=1024*1024*1024=1073741824Byte。所以问题来了,1GB的数据我后台就要存1073741824Byte,然后两个int类型进行相加直接溢出。我们先来回...原创 2019-08-21 20:59:16 · 27828 阅读 · 4 评论 -
Java根据IP地址判断客户端属于哪个国家或地区
腾讯、新浪、淘宝都有相应的调用接口,这里我用的是淘宝第三方的接口。url: http://ip.taobao.com/service/getIpInfo.php/** * 根据IP地址判断客户端属于哪个国家或地区 * @param content 请求的参数 格式为:name=xxx&pwd=xxx * @param encodingString 服务器端请求编码。如GBK,UT...原创 2019-08-11 21:56:43 · 5784 阅读 · 10 评论 -
Java判断时间格式是否为yyyyMMddHHmmss的合法格式
话不多说,直接上代码!!!/** * 判断时间的格式是否为“yyyyMMddHHmmss”格式的合法日期字符串 * @param str * @return */public static boolean isValidDate(String str) { try { if (StringUtils.isNotEmpty(str)) { ...原创 2019-08-10 17:19:19 · 2742 阅读 · 0 评论 -
Java经典基础面试题,你会几道?(3)
下面这道题介绍 BigDecimal1、BigDecimal 的用处《阿里巴巴Java开发手册》中提到:浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能用 equals 来判断。 具体原理和浮点数的编码方式有关,这里就不多提了,我们下面直接上实例:float a = 1.0f - 0.9f;float b = 0.9f - 0.8f;System.out.printl...原创 2019-07-16 23:42:06 · 363 阅读 · 0 评论 -
JSONObject中Java对象转换成Json格式的两种方式
1、alibaba的JSONObject对象调用toJSONString方法直接转换pom.xml 依赖:<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.41</...原创 2019-07-04 00:29:18 · 49632 阅读 · 2 评论 -
post请求实现excel导出下载功能
主要思路:一、pom依赖<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version></dependency>二、前台传给后台的数据...原创 2019-05-17 21:58:09 · 13008 阅读 · 2 评论 -
SpringBoot集成MyBatis的分页插件PageHelper
首先说说MyBatis框架的PageHelper插件吧,它是一个非常好用的分页插件,通常我们的项目中如果集成了MyBatis的话,几乎都会用到它,因为分页的业务逻辑说复杂也不复杂,但是有插件我们何乐而不为?通常引入它们只需三步骤,不管是Spring集成还是SpringBoot集成都是老套路,我就分开总结了,望各位笑纳。Spring集成PageHelper:第一步:pom文件引入依赖 <...原创 2019-05-22 23:31:03 · 2818 阅读 · 2 评论 -
Java实现分页功能常见的几种方法
一、limit关键字service层@Service@Transactionalpublic class ImplStudentService implements StudentService { @Resourceprivate StudentDao studentDao; @Override public List<Student> sel...原创 2019-05-22 23:21:53 · 83548 阅读 · 6 评论 -
数组和链表数据结构描述,各自的时间复杂度。
两种数据结构都是线性表,在排序和查找等算法中都有广泛的应用一、各自的特点:数组:数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素。如果应用需要快速访问数据,很少或不插入和删除...原创 2019-02-17 22:57:14 · 11841 阅读 · 10 评论 -
Java实现迭代器修改集合中的数据
直接上代码!!!package com.test;import java.util.ArrayList;import java.util.Iterator;public class ArrayListTest { public static void main(String[] args) { boolean flag = false; Ar...原创 2019-02-22 23:26:59 · 5483 阅读 · 0 评论 -
java容易混淆的15个知识点
java知识点不多,但是有一些经常会被我们忽略1.java是强类型的语言,数组也是对象,一旦确定数组的类型,里面就只能存放一个类型的数据。2.新建的对象都被存放到堆上,如果没有引用,会很快垃圾回收。3.java没有全局变量和方法这个概念,全局方法,被加上static关键字,全局的变量是,static final4.java是值传递,对于primitive基本类型,是拷贝数值,对于复杂对象类...原创 2019-02-17 21:00:10 · 270 阅读 · 1 评论 -
Java异常error和exception的区别,CheckedException,RuntimeException的区别。
异常发生的原因有很多,通常包含以下几大类:用户输入了非法数据。要打开的文件不存在。网络通信时连接中断,或者JVM内存溢出。这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。要理解Java异常处理是如何工作的,你需要掌握以下三种类型的异常:检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文...原创 2019-02-17 11:47:08 · 6036 阅读 · 4 评论 -
请结合OO设计理念,谈谈访问修饰符public、private、protected、default在应用设计中的作用。
Java中访问修饰符public、private、protecte、default的意义讲解:访问修饰符,主要标示修饰块的作用域,方便隔离防护。public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类...原创 2019-02-17 01:09:07 · 3276 阅读 · 0 评论