java基础
zhangSir134
不断思考,不断总结
展开
-
java file.renameTo返回false的原因记录
需要对文件夹下的文件重命名,发现返回false了,先用main方法测试,发现没问题,如下 public static void main(String[] args) throws IOException { File file1 = new File("D:\\aabb.xml"); File file2 = new File("D:\\ccdd.xml"); boolean b = file1.renameTo(file2); Syste原创 2020-12-19 15:48:37 · 7973 阅读 · 2 评论 -
java 调用groovy脚本,实现多个sql按指定逻辑运行,可做报表预聚合
java 调用groovy脚本,实现多个sql按指定逻辑运行,可做报表预聚合1、引入pom <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy</artifactId> <version>2.1.6</version> </depende原创 2020-12-01 14:49:02 · 6613 阅读 · 0 评论 -
excel导出经验
excel导出经验,供参考原创 2020-07-01 19:46:47 · 7677 阅读 · 1 评论 -
ThreadLocal不仅要应付面试,更要真的理解,真的会用
ThreadLocal,千万不要一看就会,一用就废原创 2020-04-12 02:45:00 · 7638 阅读 · 0 评论 -
synchronized锁
现在集群,分布式,微服务这么火,基本上也不会有单机服务了,所以synchronized基本上就废了,但不影响我们再回忆一下他的一些思想,很多东西,万变不离其宗。原创 2020-03-17 23:52:49 · 7637 阅读 · 0 评论 -
[java基础] --- java开发,service层是不是一定要写接口
估计很多java开发的同学都遇到过,service层要写一个接口,然后再写接口的实现类,但这个接口从项目开始到项目倒闭,都不会有第二个实现,那为什么不直接写个service类呢?如果你还没想过这个问题,那要好好想想了。网友支持接口模式的,大概原因如下:1、现在大部分工程都是基于spring框架开发的,我们知道,spring的开发风格就是面向接口的,所以很多人照着搬过来了。2、接口就是多态,加...原创 2020-02-20 10:42:34 · 13787 阅读 · 8 评论 -
java8新特性(7)— Base64
java8新特性(7)— Base64新增Base64工具类package com.common.jdk8;import java.io.UnsupportedEncodingException;import java.util.Base64;import java.util.UUID;//在Java 8中,Base64编码已经成为Java类库的标准。//Java 8 内置了 B...原创 2019-07-02 01:29:27 · 7842 阅读 · 0 评论 -
jdk新特性
jdk8新特性:java8新特性(1)— lambda表达式java8新特性(2)— 方法引用java8新特性(3)— 函数式接口java8新特性(4)— Stream流java8新特性(5)— Optional 类java8新特性(6)— 日期与时间java8新特性(7)— Base64jdk9新特性:jdk10新特性:jdk11新特性:jdk12新特性:...原创 2019-07-02 18:22:10 · 7518 阅读 · 0 评论 -
java基础 --- Arrays.asList():返回指定数组支持的固定大小列表
Arrays.asList():返回指定数组支持的固定大小列表首先看下这个方法的源码注释,注意第一句,Returns a fixed-size list backed by the specified array.,意思就是:返回指定数组支持的固定大小列表所以:不能增加和删除元素不能增加和删除元素不能增加和删除元素细节1入参为基本类型数组时,返回的List,打印出来是一个对象,s...原创 2019-07-08 20:10:02 · 15223 阅读 · 0 评论 -
java后端获取客户端(用户)真实ip,原理
java后端获取客户端真实ip,原理:一般都是下面代码中的做法:但很多人只知道这样能拿到,稍微有改动就不知道怎么办了看看网上的各种说法,接下来容我一一讲解,如有纰漏,敬请指正。public static String getIpAdrress(HttpServletRequest request) { String ip = null; //X-Forwar...原创 2019-06-28 19:15:46 · 20681 阅读 · 0 评论 -
java 后端与前端Date类型与String类型互相转换(使用注解)
一:java 后端格式化输出Date类型的属性值到前端后端返回的类型中,直接定义Date类型,加上此注解,直接将Date类型转成自定义的格式给前端class TestDateOutput{ @JsonFormat(pattern = "yyyy-MM-dd") private Date create;}注意:非spring-boot项目,需要引入一个依赖,spring-boot项目默...原创 2019-07-15 12:32:07 · 20518 阅读 · 1 评论 -
hash和一致性hash
hash;简单的hash取余优点:计算简单,快速定位缺点:容错和扩展差,任何的增加机器或减少机器,都会伴随着重新set值比如原来有五台机器做缓存,现在加一台,那么余5就变成余6,那么所有值都变了操作不当的话短时间可能会造成缓存雪崩(一般只能成倍扩展)一致性hash:hash环想象一个环,共有2^(32-1) 个节点,如果有五台机器缓存,那么就将这五台的ip分别hash后对2^(32...原创 2019-07-25 09:19:45 · 7293 阅读 · 0 评论 -
Java 线程状态---WAITING(部分转载)
看到一篇关于写线程waiting状态的文章,感觉很生动有趣,转过来保存下。 定义 一个正在无限期等待另一个线程执行一个特别的动作的线程处于这一状态。 A thread that is waiting indefinitely for another thread to perform a particular action is in this state. 然而这里并没有...原创 2019-08-01 20:16:02 · 13767 阅读 · 0 评论 -
java 记录一个类加载顺序的坑
看看这个,先想想结果打印的顺序和a、b的值public class ClassLoderTest { public static void main(String[] args) { staticFun(); } static ClassLoderTest clt = new ClassLoderTest(); static { ...原创 2019-08-15 10:05:00 · 7138 阅读 · 0 评论 -
我们的java项目,要不要废弃switch
java项目中要不要废弃使用switch先看switch是怎么产生的:很久以前,计算能力很昂贵,电脑性能很差,人们便想着法子的提高执行效率先看看if(test==0)的处理逻辑:先是把test的值放在一个寄存器中,然后把0放在另一个寄存器中,然后做减法,然后根据结果再判断是否执行后面的语句再看看switch的处理逻辑:switch是在编译阶段就将判断条件和子函数地址逻辑绑定了,真正执行...原创 2019-09-12 17:38:45 · 8342 阅读 · 0 评论 -
限流算法(漏桶算法、令牌桶算法)对比
限流算法(漏桶算法、令牌桶算法)漏桶算法:有个桶,比如最大能进10个单位的水(请求),桶底有个洞,以每秒2个单位的水的速度往下漏。那么每秒就能处理2个单位的水,但是总共能缓存10个单位的水。如果进水太多,多出10个单位的水就溢出来了,也就是拒绝请求或阻塞。令牌桶算法:有个桶,每个固定时间会向桶里放令牌,放满就不放了,而每次请求都会从桶里去拿令牌,拿到才能正常请求。如果拿的速度大于放的...原创 2019-09-12 18:04:09 · 7931 阅读 · 0 评论 -
java8新特性(6)— 日期与时间
java8新特性(6)— 日期与时间全新的日期与时间处理package com.common.jdk8;import java.time.*;//Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理。//在旧版的 Java 中,日期时间 API 存在诸多问题,其中有://非线程安全 − java.util.Date 是非线程安全的,所...原创 2019-07-02 01:25:54 · 7568 阅读 · 0 评论 -
java8新特性(5)— Optional 类
java8新特性(5)— Optional 类空指针解决方案package com.common.jdk8;import java.util.Optional;//Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。//Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Opti...原创 2019-07-02 01:23:27 · 7490 阅读 · 0 评论 -
BigDecimal的个人总结
前言: 互联网公司,对于BigDecimal的使用,还是较为频繁的,那么就会涉及到关于这个类型的种种问题.1:为什么使用BigDecimal 首先java八大基本类型真的很基本,4个整型搞不了小数,double和float搞的了小数,但搞不好,关键时刻就调链子,当然这也和他们存储方式有关(二进制无法精确的表示1/10),天生注定搞不了精密计算,尤其是和钱相关的.所以一般我们对于精密点的...原创 2018-05-03 22:00:37 · 2382 阅读 · 2 评论 -
String的split方法的使用
java中String类中的split方法的使用原创 2018-04-25 23:05:46 · 46812 阅读 · 10 评论 -
BeanUtils.copyProperties(对象A,对象B)
对于两个实例的复制,如果属性名字相同,则可以通过这个方法来操作,但是在使用的时候,一定要注意BeanUtils用的是哪个包的,因为有两个包下都有这个类和对应的方法,而复制方向却相反,一定要注意!!!1.org.springframework.beans.BeanUtils 这个包下的BeanUtils.copyProperties(对象A,对象B),是将A的值复制到B2.org.apac...原创 2018-05-10 21:27:27 · 3857 阅读 · 0 评论 -
布尔类型(boolean/Boolean)自动生成的get方法需要注意的小细节
idea会自动生成get/set方法的, 对于布尔类型,要非常注意生成的get方法,到底是is开头还是get开头.先说结论: 1.Boolean类型,生成的get方法是get开头的(建议使用这个). 2.boolean类型,生成的get方法是is开头的(用这个最好重写getXxx()格式的方法).以下这个例子,可以验证这个区别:class TestClass{ priv...原创 2018-06-06 18:45:23 · 21625 阅读 · 4 评论 -
并发和并行
并行是针对多处理器维度说的,每个处理器都有独自计算的能力,多个处理器同时计算就是并行并发是针对单处理器的维度说的,每个处理器在同时处理多个任务,其实准确的说,并不是同时执行,只是多个任务直接切换的特别快,快到我们感觉不到任务的切换,使我们只是感觉到多个任务都在执行,所以也有人说宏观串行,微观并行举个例子:并行好比三个人同时吃三碗饭,每个人相当于一个处理器 并发就是一个人吃三碗...原创 2018-08-28 09:39:13 · 8312 阅读 · 2 评论 -
java获取本机ipv4,并使用Google Guava 缓存
java写个util,获取本机ip,并使用Google Guava 缓存起来四个方法:获取本机ipv4ip转16进制16进制转ip校验ip首先,Google Guava使用的maven配置 <dependency> <groupId>com.google.guava</groupId> <...原创 2018-11-01 23:18:54 · 8445 阅读 · 0 评论 -
重构,体现一个工程师的基本素养和底蕴(细节篇)
重构小记(重构,改善既有代码的设计读后总结) 方法级别提炼函数:将一个大方法,拆成多个小方法,难点在于小方法的命名。假如有早上上学的一个大方法,那么就应该在里面有起床,穿衣服,吃早点等小方法,而起床这个方法又可以分为穿衣服,穿鞋,叠被子等方法,而穿衣服又有穿内衣,穿外衣等步骤。内联函数一个太小的方法,里面只做了一个动作,就可以考虑去掉了,去掉会使代码更清晰。感觉内联函数说的就...原创 2019-03-03 23:22:57 · 7588 阅读 · 0 评论 -
try-with-resource语法
jdk1.7引入了一个语法叫try-with-resource语法,它的使用如下:如果一个类实现了AutoCloseable接口,并行重写close方法。那么这个类就可以写在try-catch的try后面的括号中,并且能在try-catch块执行后自动执行这个方法。举例如下:public class TryWithResource implements AutoCloseable { ...原创 2019-03-13 21:40:17 · 19261 阅读 · 2 评论 -
java读文件写文件
使用了try-with-resource语法(JDK1.7及以上),代码更加便捷Junit测试样例,先写入文件,再读出来:@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = "classpath:spring-config-service-test.xml")public class FileTe...原创 2019-03-13 21:50:44 · 8665 阅读 · 1 评论 -
用redis实现延迟队列
现在在用的redis实现延迟队列的主流程原创 2019-04-02 00:14:08 · 8319 阅读 · 1 评论 -
记录---基于BigDecimal的特殊的四舍五入
机试问题—实现基于BigDecimal的特殊的四舍五入。这是一道外企的机试题,我把里面的某个难点部分,摘出来详细如下://实现特殊的四舍五入,先普通四舍五入取到小数点后两位,然后最后一位向后进位,0和5不变,1234变5,6789进1变0也就是说最后一位要么是0,要么是5// 2.201–>2.20// 2.20–>2.20// 2.23–>2.25// 2.25–...原创 2019-06-03 23:23:14 · 8389 阅读 · 0 评论 -
java8新特性(1)--- lambda表达式
java8新特性(1)— lambda表达式函数式编程,简化开发package com.common.jdk8;// 试想,如果在jdk1.7中,我们要实现基于这个接口的加法运算,一般会这样// 先创建一个接口的实现类,实现这个方法,然后初始化这个实现类,再调用这个方法// jdk1.8中引入函数式编程的思想,具体就是lambda表达式,目的就在于简化上述问题public class...原创 2019-07-02 01:06:13 · 7515 阅读 · 0 评论 -
java8新特性(2)--- 方法引用
java8新特性(2)— 方法引用新增语法双冒号(::)package com.common.jdk8;import java.util.Arrays;import java.util.List;//方法引用public class Jdk8Test2 { public static void main(String[] args) { //构造器引用:它的...原创 2019-07-02 01:10:42 · 7459 阅读 · 0 评论 -
java8新特性(3)--- 函数式接口
java8新特性(3)— 函数式接口有且仅有一个抽象方法package com.common.jdk8;import java.util.Arrays;import java.util.List;import java.util.function.Predicate;// 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的...原创 2019-07-02 01:16:05 · 7520 阅读 · 0 评论 -
java8新特性(4)— Stream流
java8新特性(4)— Stream流遍历集合更强大package com.common.jdk8;import java.util.*;import java.util.stream.Collectors;//Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。//Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供...原创 2019-07-02 01:21:04 · 7489 阅读 · 0 评论 -
对象引用 String引用 基本类型引用 差别
最近遇到一个线上问题,原因是忽略的引用的一些语法,导致出错,现在记录一下:@Test public void testList(){ List<String> list = new ArrayList<String>(); list.add("1"); list.add("2"); list.add("3"); Li原创 2018-04-13 23:04:02 · 1279 阅读 · 0 评论