JAVA
JAVA后端知识点整理
阿杰同学
希望大家都能找到心仪的工作,学习是一条时而郁郁寡欢,时而开怀大笑的路,加油。如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。如果有幸我们江湖再见!
展开
-
Java中==和equals的区别
未重写equals方法的类:Object中的equals方法实际使用的也是==操作符,比较的是他们的内存地址是否同一地址。重写了equals方法的类:实现该类自己的equals方法比较逻辑(一般是比较对象的内容是否相同)。引用类型对象变量其实是一个引用,它们的值是指向对象所在的内存地址,而不是对象本身。Integer:比较对应的基本数据类型int的值是否相同(==操作符)。引用数据类型:比较的是他们的内存地址是否同一地址。基本数据类型:比较的是他们的值是否相同。原创 2023-02-07 19:39:09 · 81 阅读 · 0 评论 -
idea打war包
打包原创 2023-01-30 18:01:13 · 103 阅读 · 0 评论 -
isnull和sum的关系
在一组数据统计的过程中,只要使用到sum函数,就必须使用isnull函数包含起来,因为你如果有其中一项没有值,那么你的整个运算的值就是null,查询出来可能就是0。先问大家这样一个问题,print 100+null 等于多少?这是我刚刚写存储过程的时候意识到的一个问题!原创 2022-08-20 09:12:35 · 565 阅读 · 0 评论 -
SpringBoot2.x 整合AOP切面编程
面向方面编程(AOP)通过提供另一种思考程序结构的方式来补充面向对象编程(OOP)。OOP中模块化的关键单元是类,而在AOP中,模块化单元是方面。原创 2022-08-16 17:23:29 · 357 阅读 · 0 评论 -
Java中的枚举Enum
在Java没有提供枚举的时候,比如我们要使用一个表示周几的枚举值怎么办?原创 2022-08-16 16:57:02 · 158 阅读 · 0 评论 -
BigDecimal在计算中丢失精度问题
首先我们先用一段代码复现问题根源,如下所示:public static void main(String[] args) { BigDecimal bigDecimal=new BigDecimal(88); System.out.println(bigDecimal); bigDecimal=new BigDecimal("8.8"); System.out.println(bigDecimal); bigDecimal=new BigDecimal(8.8);原创 2022-05-06 09:27:46 · 2360 阅读 · 0 评论 -
SpringBoot Maven升级自带的jar包版本
当SpringBoot自带jar 包版本较低时如图:想要升级jar包到更高版本,需要在pom.xml文件中做修改:要先去掉默认配置 添加的依赖才会生效 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <!-- 去掉springboot默认配置 -->原创 2022-04-27 11:33:30 · 3360 阅读 · 0 评论 -
都什么年代了你还在用Date
传统的 Date这篇文章就主要来谈一谈 Java 中处理日期时间用什么 API 比较好。我本来不准备写这篇文章的,因为我觉得 Java17 都特么出来了,大家对 Java8 提供的时间日期 API 都很熟悉了。但是经过我调研,很多中小公司还在用老版本的 Date 来处理时间日期,视 Java8 提供的时间日期 API 于无物,所以还是想来推荐一下新一代的时间日期 API,希望对大家有帮助。老版本的 Date 相信大家都很熟悉了,这里就简单介绍几个点 SimpleDateFormat sdf =原创 2022-04-27 10:17:40 · 163 阅读 · 0 评论 -
mybatis xml注释sql 的注意事项
说明:在mybatis 的sql里不是不能写注释,而是注释不能有#{},mybatis仍旧会把#{}算成一个带注入的参数如代码段2所示,mysql数据库更换为oracle数据库时,#{date}需要明确jdbcType,而该代码段中仅将适用于mysql的sql注释,依旧会报同样的错,最好是将注释的sql删除。注意事项1、where语句等用到大于小于等符号时候,需要使用 <![CDATA[ > ]]>或者 <![CDATA[ < ]]>进行识别。2、如果sql文中有原创 2022-04-22 16:26:40 · 1831 阅读 · 0 评论 -
Map循环遍历的常用方法
常用Map循环遍历的方法 Map<String, Object> map = new HashMap<String, Object>(); map.put("1", "a"); map.put("2", "b"); map.put("3", "c"); System.out.println(map.containsKey("4")); //构造测试数据 List<Map<原创 2022-04-22 15:10:29 · 863 阅读 · 0 评论 -
技巧集:nginx作代理时,查看请求被转发到哪台服务器
使用Nginx代理多台服务器实行负载的时候,如何查看某一个请求被转发到哪台服务器上呢?pstream demo {server 127.0.0.1:8781;server 127.0.0.1:8087;} server { listen 80; server_name demo.testcas.com; #charset koi8-r; #access_log logs/host.access.log mai原创 2022-04-21 16:36:11 · 3527 阅读 · 0 评论 -
测试工具ApacheJMeter使用教程-详解
首先了解一下jmeret主要的配置元件1、测试计划:是使用 JMeter 进行测试的起点,它是其它 JMeter测试元件的容器2、线程组:代表一定数量的用户,它可以用来模拟用户并发发送请求。实际的请求内容在Sampler中定义,它被线程组包含。3、配置元件:维护Sampler需要的配置信息,并根据实际的需要修改请求的内容。4、前置处理器:负责在请求之前工作,常用来修改请求的设置5、后置处理器:负责在请求之后工作,常用获取返回的值。一个接口的调通1.首先 选择添加 ---------原创 2022-04-19 18:40:55 · 4087 阅读 · 0 评论 -
9张图+32个案例带你轻松玩转Java stream
Java8 中增加了 Stream 处理,可以配合 Lambda 表达式来使用,让操作集合非常便利。虽然我们平时经常使用 Stream,但用到的方法其实非常少,这篇文章就来完整的介绍 Stream 的使用Stream 提供的方法非常多,按照调用当前方法是否结束流处理,可以分为中间操作和结束操作。对于中间操作,又可以分为有状态的操作和无状态操作:无状态的操作是指当前元素的操作不受前面元素的影响。有状态的操作是指当前元素的操作需要等所有元素处理完之后才能进行。对于结束操作,又可以分为短路操作和非.原创 2022-03-01 19:56:06 · 114 阅读 · 0 评论 -
Java设计模式:策略Strategy模式,以电影票折扣策略为例
多态:多态,是面向对象的程序设计语言最核心的特征。多态,意味着一个对象有着多重特征,能够在特定的情况下。表现不同的状态,从而相应着不同的属性和方法。通俗的说,同一操作作用于不同的对象,能够有不同的解释,产生不同的执行结果。在执行时,能够通过指向基类的指针,来调用实现派生类中的方法。/** * 折扣策略。 * * @author zhangfly * */public interface DiscountStrategy { public double getDiscountPrice(.原创 2022-02-28 19:39:00 · 1133 阅读 · 0 评论 -
JavaSE进阶知识学习----多线程基础知识
多线程基础知识1.概述程序,进程和线程程序:是为了完成某一特定的功能或任务,用某种语言编写的一段静态代码。进程:是程序的一次执行过程,它自身有产生,存在和消亡的生命周期。线程:是进程的小单元,是一个程序内部的一条执行路径。2.Java中多线程的创建和使用2.1线程的创建方法之一:继承Thread类,重写Run()方法。使用说明:1.定义子类继承Thread类。2.子类中重写Thread类中的run方法。3.创建Thread子类对象,即创建了线程对象4.调用线程对象的start方法,启动原创 2022-02-15 10:38:39 · 144 阅读 · 0 评论 -
JAVA 获取当前时间(年月日时分秒)
获取当前时间(年月日时分秒)Date d = new Date();SimpleDateFormat sbf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println(sbf.format(d));或System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); 2020-04-28 14:23:05获取当前时间戳原创 2022-01-24 10:53:37 · 37884 阅读 · 0 评论 -
Java从天气网爬取历史天气数据
private static String URL = "http://lishi.tianqi.com"; private static String BaseURL = "http://www.tianqi.com"; public static Map<String,Object> getWeather(String city){ Map<String,Object> map = new HashMap<>(); ...原创 2022-01-24 09:25:49 · 725 阅读 · 2 评论 -
java8 Stream的实现原理 (从零开始实现一个stream流)
1.从零开始实现stream流1.1 java8 stream介绍java8新增了stream流的特性,能够让用户以函数式的方式、更为简单的操纵集合等数据结构,并实现了用户无感知的并行计算。1.2 从零开始实现一个stream流相信很多人在使用过java8的streamAPI接口之后,都会对其实现原理感到好奇,但往往在看到jdk的stream源码后却被其复杂的抽象、封装给弄糊涂了,而无法很好的理解其背后的原理。究其原因,是因为jdk的stream源码是高度工程化的代码,工程化的代码为了效率和满足各式原创 2022-01-22 10:35:27 · 2007 阅读 · 0 评论 -
redis和memcached的区别和使用场景
Redis 和 Memcached 都是基于内存的数据存储系统。Memcached是高性能分布式内存缓存服务,其本质上就是一个内存key-value数据库。Redis是一个开源的key-value存储系统。与Memcached类似,Redis将大部分数据存储在内存中,支持的数据类型包括:字符串、哈希表、链表、集合、有序集合以及基于这些数据类型的相关操作。区别1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等;2、Redi原创 2022-01-06 19:10:47 · 1241 阅读 · 0 评论 -
HashMap中为啥要重写hashcode和equals方法
1. equals方法如果使用==判断俩个对象是否相等,这个只是从地址看是否相等,而与我们的需求是不符合的。即使俩个对象地址是不同的,如果它的属性是相同的,那么可判定这俩个对象相等。未重写equals方法:public class Person { public static void main(String[] args) { Person p1 = new Person(); Person p2 = new Person(); Sy原创 2021-12-30 17:04:56 · 2032 阅读 · 1 评论 -
21 个刁钻的 HashMap 面试题
1:HashMap 的数据结构?A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点。当链表长度超过 8 时,链表转换为红黑树。transient Node<K,V>\[\] table;2:HashMap 的工作原理?HashMap 底层是 hash 数组和单向链表实现,数组中的每个元素都是链表,由 Node 内部类(实现 Map.Entry存储对象时,将 K/V 键值传给 put() 方法:①、调用 hash(K) 方法计算 K 的 hash 值,然后结合数组长度,原创 2021-12-30 10:42:52 · 307 阅读 · 1 评论 -
十大经典排序算法(动图演示)
算法概述算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。算法复杂度相关概念稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。时间复杂度:对排序数据的总的原创 2021-12-24 17:21:07 · 153 阅读 · 0 评论 -
梳理一下我理解的aop
先记录一下AOP的几个概念:AOP:首先,AOP是Aspect-Originted Programming,即面向切面编程。我觉得可以这样地简单理解,aop就是为了你更清楚的逻辑,让你的业务逻辑代码更清晰,不用去想其他事,像日志啊,权限啊这些和业务逻辑无关的东西。那要怎么用这些又很重要的功能呢?我们不用改变原来的代码,只要在另一个个地方,把这些要附加的功能打包好,然后运行的时候切进你要用这些功能的地方,aop其实大概就是这样。好的那就来看看下面的几个名词:advice:翻译成增强、通知,其实就是你要原创 2021-12-21 17:22:40 · 207 阅读 · 0 评论 -
java设计模式面试专题及答案
java设计模式面试专题及答案1.请列举出在 JDK 中几个常用的设计模式?单例模式(Singleton pattern)用于 Runtime,Calendar 和其他的一些类中。工厂模式(Factory pattern)被用于各种不可变的类如 Boolean,像 Boolean.valueOf。观察者模式(Observer pattern)被用于 Swing 和很多的事件监听中。装饰器设计模式(Decoratordesign pattern)被用于多个 Java IO 类中。2.什么是设计原创 2021-12-14 15:24:08 · 177 阅读 · 0 评论 -
Java编程题 (一)
一个球从100米高度自由落下,每次落地后反弹回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高import java.text.*;public class Text_10 { public static void main(String[] args) { /* * 一个球从100米高度自由落下,每次落地后反弹回原高度的一半; * 再落下,求它在第10次落地时,共经过多少米?第10次反弹多高 *原创 2021-12-14 15:15:29 · 420 阅读 · 0 评论 -
final finally 和 finalize的区别
final finally 和 finalize的区别1、final修饰符(关键字)被final修饰的类,就意味着不能再派生出新的子类,不能作为父类而被子类继承。因此一个类不能既被abstract声明,又被final声明。将变量或方法声明为final,可以保证他们在使用的过程中不被修改。2、finally是在异常处理时提供finally块来执行任何清除操作不管有没有异常被抛出、捕获,finally块都会被执行。try块中的内容是在无异常时执行到结束。catch块中的内容,是在try块内容发生c原创 2021-12-14 15:04:07 · 63 阅读 · 0 评论 -
遍历List集合的三种方法
遍历List集合的三种方法List<String> list = new ArrayList<String>();list.add("aaa");list.add("bbb");list.add("ccc");方法一:超级for循环遍历for(String attribute : list) { System.out.println(attribute);}方法二:对于ArrayList来说速度比较快, 用for循环, 以size为条件遍历:for(in原创 2021-12-14 14:52:33 · 7919 阅读 · 0 评论 -
Thread中start()和run()的区别
Thread中start()和run()的区别start() 和 run()的区别说明start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用。run() : run()就和普通的成员方法一样,可以被重复调用。单独调用run()的话,会在当前线程中执行run(),而并不会启动新线程!class MyThread extends Thread{ public void run(){ ... } };原创 2021-12-14 14:47:33 · 977 阅读 · 0 评论 -
nginx负载均衡的5种策略
nginx负载均衡的5种策略要理解负载均衡,必须先搞清楚正向代理和反向代理。反向代理和正向代理区别一 什么是代理代理其实就是一个中介,A和B本来可以直连,中间插入一个C,C就是中介。刚开始的时候,代理多数是帮助内网client访问外网server用的后来出现了反向代理,"反向"这个词在这儿的意思其实是指方向相反,即代理将来自外网客户端的请求转发到内网服务器,从外到内二 正向代理正向代理类似一个跳板机,代理访问外部资源比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理原创 2021-12-14 10:26:46 · 14810 阅读 · 1 评论 -
Redis为什么那么快
Redis是一个单线程应用,所说的单线程指的是Redis使用单个线程处理客户端的请求。 虽然Redis是单线程的应用,但是即便不通过部署多个Redis实例和集群的方式提升系统吞吐, 从官网给出的数据可以看出,Redis处理速度非常快。Redis性能非常高的原因主要有以下几点:内存存储:Redis是使用内存(in-memeroy)存储,没有磁盘IO上的开销单线程实现:Redis使用单个线程处理请求,避免了多个线程之间线程切换和锁资源争用的开销非阻塞IO:Redis使用多路复用IO技术,在poll,e原创 2021-12-10 17:37:33 · 654 阅读 · 0 评论 -
mkdir与mkdirs的区别
项目中需要在代码中读取或创建文件保存路径,用到了mkdir,查看还有个mkdirs方法,这里记录一下两者的区别。1、关于两者的说明如下:boolean mkdir() : 创建此抽象路径名指定的目录。boolean mkdirs() : 创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。2、结合自己的理解及具体实践如下: mkdir():只能创建一层目录, 如:File file = new File("e:/test");file.mkdir();这样会在e:/路径下创建t原创 2021-12-08 15:18:15 · 6867 阅读 · 1 评论 -
java 8两个List集合取交集、并集、差集、去重并集
public class ListTest { public static void main(String[] args) { ArrayList<String> listA = Arrays.asLis(t("a", "b", "c", "d", "e").toString().split(",")); ArrayList<String> listB = Arrays.asLis(t( "b", "c", "d", "e", "原创 2021-12-07 10:58:05 · 1881 阅读 · 0 评论 -
同步异步是啥?
定义:同步和异步关注的是 消息通信机制 (synchronous communication/ asynchronous communication)。同步,就是调用某个东西是,调用方得等待这个调用返回结果才能继续往后执行。异步,和同步相反 调用方不会理解得到结果,而是在调用发出后调用者可用继续执行后续操作,被调用者通过状体来通知调用者,或者通过回掉函数来处理这个调用。比方说:你去商城买东西,你看上了一款手机,能和店家说你一个这款手机,他就去仓库拿货,你得在店里等着,不能离开,这叫做同步。现在原创 2021-11-24 10:25:36 · 629 阅读 · 0 评论 -
Nacos和Zookeeper对比
Nacos和Zookeeper对比1.Zookeeper其实明白一点Zookeeper的功能主要是它的树形节点来实现的。当有数据变化的时候或者节点过期的时候,会通过事件触发通知对应的客户端数据变化了,然后客户端再请求zk获取最新数据,采用push-pull来做数据更新。ZK最重要的就是它的ZAB(消息广播和崩溃恢复)协议了。消息广播: 集群中zk在数据更新的时候,通过leader节点将将消息广播给其他follower节点,采用简单的两阶段提交模式,先request->ack->commi原创 2021-11-18 11:25:28 · 3702 阅读 · 0 评论 -
Java面经の深入理解volatile
深入理解volatile下面介绍几个概念:共享变量:共享变量是指可以同时被多个线程访问的变量,共享变量是被存放在堆里面,所有的方法内临时变量都不是共享变量。重排序:重排序是指为了提高指令运行的性能,在编译时或者运行时对指令执行顺序进行调整的机制。重排序分为编译重排序和运行时重排序。编译重排序是指编译器在编译源代码的时候就对代码执行顺序进行分析,在遵循as-if-serial的原则前提下对源码的执行顺序进行调整。as-if-serial原则是指在单线程环境下,无论怎么重排序,代码的执行结果都是确定的。运原创 2021-11-16 11:15:50 · 130 阅读 · 0 评论 -
配置jdk与maven环境变量
1.jdk环境变量配置1.下载安装jdk,配置环境变量2.点击我的电脑右键 — 属性 — 高级系统设置 — 环境变量3.在系统变量中新增JAVA_HOME ,变量值为 D:\jdk84.在系统变量中寻找path 在红圈最后加入以下代码 ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin5.注意! 一定要javac,java -version全部由输出才算安装成功2.安装maven 配置环境变量1.点击我的电脑右键 — 属性 — 高级系统设置 — 环境变量2.在系原创 2021-11-16 10:01:49 · 1573 阅读 · 0 评论 -
map反转key value
通过VALUE反向求KEY的方法Map<String,Object> a1=new HashMap<>();a1.put("x","1");a1.put("y","2");Map<String,Object> a2=new HashMap<>();a2.put("x","2");a2.put("y","3");Map<String,Object> a3=new HashMap<>();a3.put("x","3");a原创 2021-11-09 16:29:13 · 1691 阅读 · 0 评论 -
Java中Map的 entrySet() 详解以及用法(四种遍历map的方式)
Entry由于Map中存放的元素均为键值对,故每一个键值对必然存在一个映射关系。Map中采用Entry内部类来表示一个映射项,映射项包含Key和Value (我们总说键值对键值对, 每一个键值对也就是一个Entry)Map.Entry里面包含getKey()和getValue()方法———————————————— Iterator<Map.Entry<Integer, Integer>> it=map.entrySet().iterator(); while(it原创 2021-11-01 11:14:00 · 1963 阅读 · 0 评论 -
HashMap 和 Hashtable 的区别
HashMap 和 Hashtable 的区别线程是否安全: HashMap 是非线程安全的,HashTable 是线程安全的,因为 HashTable 内部的方法基本都经过synchronized 修饰。(如果你要保证线程安全的话就使用 ConcurrentHashMap 吧!);效率: 因为线程安全的问题,HashMap 要比 HashTable 效率高一点。另外,HashTable 基本被淘汰,不要在代码中使用它;对 Null key 和 Null value 的支持: HashMap 可以存原创 2021-10-29 15:11:54 · 11801 阅读 · 0 评论 -
springboot项目快速搭建
新建Springboot项目(1)file->new->project(2)点击next(第一个)创建springboot项目(因为连接的国外的网站,next有时会几秒的延迟),将两个值改成自己的配置,Group:com.laowang ,Artifact:sptest,其他可以不用动,点击ok(3)点击next(第二个)选择web-》spring web(4)点击next(第三个)不用做修改,直接finish新建springboot项目已经完成。springboot原创 2021-10-27 10:29:54 · 114 阅读 · 0 评论