![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
colocola
公众号:TT程序员
展开
-
redis 实现分布式锁
防止重复下单等等操作皆可用 /** * redis 缓存处理 */ @Autowired private StringRedisTemplate redisTemplate;@Override public boolean insertObjectLock(final Object obj, final String key, final long timeout) { log.debug("insertObjectLock r原创 2022-02-15 15:39:34 · 422 阅读 · 0 评论 -
BeanCreationException: Could not autowire field: private
BeanCreationException: Could not autowire field: private本次错误原因:dubbo消费者 没有配置原创 2021-11-04 18:39:14 · 621 阅读 · 0 评论 -
将博客搬至CSDN
1原创 2021-07-20 09:55:33 · 76 阅读 · 0 评论 -
闭嘴面试官:你了解synchronized吗?
synchronized简介开启了10个线程,每个线程都累加了1000000次,如果结果正确的话自然而然总数就应该是10 * 1000000 = 10000000。可就运行多次结果都不是这个数,而且每次运行结果都不一样。这是为什么了?有什么解决方案了?这就是我们今天要聊的事情。在上一篇博文中Java内存模型以及happens-before规则我们已经了解了的一些知识,并且已经知道出现线程安全的主要来源于JMM的设计,主要集中在主内存和线程的工作内存而导致的内存可见性问题,以及重排序导致的问题,进一步.原创 2021-06-30 09:16:02 · 113 阅读 · 0 评论 -
关于\u000d和\u000a
代码:/** * @author zjt * @version 1.0 * @date 2021/5/7 16:58 */public class stringTest { public static void main(String[] args) { String a = "Hello"; // \u000d a="world"; System.out.println(a); // \u000a a="hello wo原创 2021-05-07 17:04:38 · 1451 阅读 · 0 评论 -
面试项目经验业务:二维码支付
本文设计到:高并发、分布式集群、高可用、锁二维码介绍二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。图片 是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图像输入设备或原创 2021-05-07 10:50:32 · 282 阅读 · 0 评论 -
关于java线程池的使用
执行一个异步任务你还只是如下new Thread吗?那你就out太多了,new Thread的弊端如下:1.每次new Thread新建对象性能差。2.线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或oom。3.缺乏更多功能,如定时执行、定期执行、线程中断。相比new Thread,Java提供的四种线程池的好处在于:1.重用存在的线程,减少对象创建、消亡的开销,性能佳。2.可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。3原创 2021-03-26 14:02:32 · 76 阅读 · 0 评论 -
new一个对象的过程
当虚拟机遇⻅new关键字时候,实现判断当前类是否已经加载,如果类没有加载,⾸先执⾏类的加载机制,加载完成后再为对象分配空间、初始化等。⾸先校验当前类是否被加载,如果没有加载,执⾏类加载机制加载:就是从字节码加载成⼆进制流的过程验证:当然加载完成之后,当然需要校验Class⽂件是否符合虚拟机规范,跟我们接⼝请求⼀样,第⼀件事情当然是先做个参数校验了准备:为静态变量、常量赋默认值解析:把常量池中符号引⽤(以符号描述引⽤的⽬标)替换为直接引⽤(指向⽬标的指针或者句柄等)的过程初始化:执⾏st.原创 2021-03-01 10:22:21 · 248 阅读 · 1 评论 -
集群容错方式有哪些?
Failover Cluster失败自动切换:dubbo的默认容错⽅案,当调用失败时自动切换到其他可用的节点,具体的重试次数和间隔时间可用通过引用服务的时候配置,默认重试次数为1也就是只调用一次。Failback Cluster失败自动恢复:在调自失败,记录日志和调用信息,然后返回空结果给consumer,并且通过定时任务每隔5秒对失败的调⽤进⾏重试Failfast Cluster快速失败:只会调用一次,失败后立刻抛出异常Failsafe Cluster失败安全:调用出现异常,记录日志不抛出,返回空.原创 2021-01-20 15:21:13 · 586 阅读 · 0 评论 -
一图看懂JVM布局
原创 2021-01-20 14:32:53 · 111 阅读 · 0 评论 -
Nginx的算法
轮询、ip_hash、weight、fair(第三方)、url_hash(第三方)1.轮询是默认的,每一个请求按顺序逐一分配到不同的后端服务器,如果后端服务器down掉了,则能自动剔除。2.ip_hash 解决了session问题:每个请求按访问IP的hash结果分配,这样每个访客可以固定一个后端服务器。3.weight是设置权重,用于后端服务器性能不均的情况,访问比率约等于权重之比:可以实现小流量分流,如果某台服务器挂了,则将流量分发到其他服务器上。4.fair (第三方)按后端服务器的响应时间来原创 2021-01-12 09:18:04 · 105 阅读 · 0 评论 -
Java 中如何使用 redis
redis 支持的数据类型及各种数据类型的 使用场景?redis 如何解决数据过期?如何使用 redis: redis 的安装(windows);启动 redis,默认端口 6379;连接 redis 输入 redis-cli.exe -h 127.0.0.1 -p 6379 java 中利用 jedis 连接 redis spring 集成 redis: 引入 spring-data-redis.jar 包; redis.properties 配置文件; spring-redis 配置文件(此处包含了数原创 2021-01-11 09:26:31 · 205 阅读 · 0 评论 -
解决jar冲突-终极方案
org.apache.maven.pluginsmaven-enforcer-plugin3.0.0-M2default-clienforcemvn -U clean validatemvn -Dautocnfig.skip -Dtest.skip enforcer:enforce -Denforcer.fail=false原创 2020-12-07 14:44:38 · 179 阅读 · 0 评论 -
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.Persiste
错误原因:mybatis 对应mapper写错了 <result column="CREATED_AT" property="createdAt" jdbcType="TIMESTAMP"/> <result column="CREATED_BY" property="createdBy" jdbcType="VARCHAR"/> <result column="UPDATED_AT" property="updatedAt" .原创 2020-12-07 14:20:57 · 1120 阅读 · 0 评论 -
java 计算器 一个文件写计算器
package test;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class calculate extends JFrame implements ActionListener { private Container ct; private JButton[] jbs; pr.原创 2020-11-30 19:09:59 · 178 阅读 · 0 评论 -
Spring IOC 如何实现
Spring 中的 org.springframework.beans 包和 org.springframework.context包构成了 Spring 框架 IoC 容器的基础。BeanFactory 接口提供了一个先进的配置机制,使得任何类型的对象的配置成为可能。ApplicationContext 接口对BeanFactory(是一个子接口)进行了扩展,在 BeanFactory 的基础上添加了其他功能,比如与 Spring 的 AOP更容易集成,也提供了处理 message resour.原创 2020-11-16 10:14:14 · 67 阅读 · 0 评论 -
synchronized 与 lock 的区别
synchronized 和 lock 的用法区别 synchronized(隐式锁):在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象。 lock(显示锁):需要显示指定起始位置和终止位置。一般使用 ReentrantLock 类做为锁,多个线程中必须要使用一个 ReentrantLock类做为对象才能保证锁的生效。且在加锁和解锁处需要通过 lock() 和 unlock() 显示指出。所以一般会在 finally块中写 un.原创 2020-11-16 10:13:26 · 169 阅读 · 0 评论 -
ThreadLocal 原理分析
ThreadLocal 提供了线程本地变量,它可以保证访问到的变量属于当前线程,每个线程都保存有一个变量副本,每个线程的变量都不同。ThreadLocal 相当于提供了一种线程隔离,将变量与线程相绑定。...原创 2020-11-16 10:12:06 · 55 阅读 · 0 评论 -
HashMap 的工作原理及代码实现
HashMap 基于 hashing 原理,我们通过 put() 和 get() 方法储存和获取对象。当我们将键值对传递给 put() 方法时,它调用键对象的 hashCode() 方法来计算 hashcode,让后找到 bucket 位置来储存值对象。当获取对象时,通过键对象的 equals() 方法找到正确的键值对,然后返回值对象。HashMap 使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。 HashMap 在每个链表节点中储存键值对对象。...原创 2020-11-16 10:11:22 · 246 阅读 · 0 评论 -
JDBC 流程
向 DriverManager 类注册驱动数据库驱动程序调用 DriverManager.getConnection 方法, 通过 JDBC URL,用户名,密码取得数据库连接的Connection 对象。获取 Connection 后, 便可以通过 createStatement 创建 Statement 用以执行 SQL 语句。有时候会得到查询结果,比如 select,得到查询结果,查询(SELECT)的结果存放于结果集(ResultSet)中。关闭数据库语句,关闭数据库连接。...原创 2020-11-16 10:10:44 · 49 阅读 · 0 评论 -
java反射的用途及实现
反射的用途Java 反射机制是一个非常强大的功能,在很多的项目比如 Spring,MyBatis 都都可以看到反射的身影。通过反射机制,我们可以在运行期间获取对象的类型信息。利用这一点我们可以实现工厂模式和代理模式等设计模式,同时也可以解决 Java 泛型擦除等令人苦恼的问题。#反射的实现获取一个对象对应的反射类,在 Java 中有下列方法可以获取一个对象的反射类通过 getClass() 方法通过 Class.forName() 方法使用 类.class通过类加载器实现,getClassL原创 2020-11-16 10:09:25 · 329 阅读 · 0 评论 -
抽象类和接口有什么区别
没什么,就是想起来一年前的面试原创 2020-11-16 10:08:22 · 190 阅读 · 0 评论 -
java 双亲委托机制
JVM设计者把类加载阶段中的“通过’类全名’来获取定义此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。1.类与类加载器对于任何一个类,都需要由加载它的类加载器和这个类来确立其在JVM中的唯一性。也就是说,两个类来源于同一个Class文件,并且被同一个类加载器加载,这两个类才相等。2.双亲委派模型从虚拟机的角度来说,只存在两种不同的类加载器:一种是启动类加载器(Bootstrap ClassLoader),该原创 2020-11-10 16:29:33 · 172 阅读 · 0 评论 -
java 时间格式转换AMPM BUG
生产上做活动今天发现一个bug 日期在时间转换过程中发生了奇怪的问题呢,9号被转译成了10号有问题的代码:` //1判断开户成功时间是否在活动期间 DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//下面这一行为有问题:SimpleDateFormat finSdf = new SimpleDateFormat("MMM d, yyyy K:m:s a", Locale.ENGLISH);//替换成:原创 2020-11-10 11:06:47 · 467 阅读 · 0 评论 -
底层原理:垃圾回收算法是如何设计的?
理解Java虚拟机垃圾回收机制的底层原理,是成为一个高级Java开发者的基本功。本文从底层的垃圾回收算法开始,着重去阐释不同垃圾回收器在算法设计和实现时的一些技术细节,去探索「why」这一部分,通过对比不同的垃圾回收算法和其实现,进一步感知目前垃圾回收的发展脉络。如果大家关注 JDK,会发现在频繁发布的 JDK 版本中,和垃圾回收相关的 JEP (JDK Enhancement Proposals,Java 增强提案)越来越多了,垃圾回收(Garbage Collection,GC)正处于方兴未艾的阶段。原创 2020-11-05 09:19:36 · 337 阅读 · 0 评论 -
java Date相关总结
包装类相关自动装箱与拆箱装箱:将基本类型用它们对应的引用类型包装起来;拆箱:将包装类型转换为基本数据类型;int 和 Integer 有什么区别Java 是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java 为每一个基本数据类型都引入了对应的包装类型(wrapper class),int 的包装类就是 Integer,从 Java 5 开始引入了自动装箱/拆箱机制,使得二者可以相互转换。Java 为每个原始类型提供了包装原创 2020-11-04 10:43:13 · 92 阅读 · 0 评论 -
String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的
可变性String类中使用字符数组保存字符串,private final char value[],所以string对象是不可变的。StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,char[] value,这两种对象都是可变的。线程安全性String中的对象是不可变的,也就可以理解为常量,线程安全。AbstractStringBuilder是StringBuilder与S原创 2020-11-04 10:41:46 · 260 阅读 · 0 评论 -
java String相关
String相关字符型常量和字符串常量的区别形式上: 字符常量是单引号引起的一个字符 字符串常量是双引号引起的若干个字符含义上: 字符常量相当于一个整形值(ASCII值),可以参加表达式运算 字符串常量代表一个地址值(该字符串在内存中存放位置)占内存大小 字符常量只占一个字节 字符串常量占若干个字节(至少一个字符结束标志)String有哪些特性不变性:String 是只读字符串,是一个典型的 immutable 对象,对它进行任何操作,其实都是创建一个新的对象,再把引用指向该对象。不变模式的主要原创 2020-11-04 10:32:44 · 443 阅读 · 0 评论 -
java反射及其应用场景
反射什么是反射机制?JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。静态编译和动态编译**静态编译:**在编译时确定类型,绑定对象**动态编译:**运行时确定类型,绑定对象反射机制优缺点优点: 运行期类型的判断,动态加载类,提高代码灵活度。缺点: 性能瓶颈:反射相当于一系列解释操作,通知 JVM 要做的事情,性能比直接的java代码要原创 2020-11-04 10:18:46 · 1836 阅读 · 0 评论 -
java IO/NIO 流
java 中 IO 流分为几种?按照流的流向分,可以分为输入流和输出流;按照操作单元划分,可以划分为字节流和字符流;按照流的角色划分为节点流和处理流。Java Io流共涉及40多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系, Java I0流的40多个类都是从如下4个抽象类基类中派生出来的。InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者原创 2020-11-03 10:08:48 · 268 阅读 · 0 评论 -
JDK 中常用的包有哪些
java.lang:这个是系统的基础类;java.io:这里面是所有输入输出有关的类,比如文件操作等;java.nio:为了完善 io 包中的功能,提高 io 包中性能而写的一个新包;java.net:这里面是与网络有关的类;java.util:这个是系统辅助类,特别是集合类;java.sql:这个是数据库操作的类。...原创 2020-11-03 10:07:18 · 1269 阅读 · 0 评论 -
为什么 Java 中只有值传递
值传递当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递是值传递。Java 语言的方法调用只支持参数的值传递。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改变,但对对象引用的改变是不会影响到调用者的为什么 Java 中只有值传递首先回顾一下在程序设计语言中有关将参数传递给方法(或函数)的一些专业术语。按值调用(call by value)表示方法接收的是调用者提供的值,而按原创 2020-11-03 10:04:53 · 250 阅读 · 0 评论 -
hashCode 与 equals (重要)
HashSet如何检查重复两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?hashCode和equals方法的关系面试官可能会问你:“你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?”hashCode()介绍hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。hashCode() 定义在JDK的Object.原创 2020-11-03 09:34:26 · 305 阅读 · 0 评论 -
什么是java内部类
什么是内部类?在Java中,可以将一个类的定义放在另外一个类的定义内部,这就是内部类。内部类本身就是类的一个属性,与其他属性定义方式一致。内部类的分类有哪些内部类可以分为四种:成员内部类、局部内部类、匿名内部类和静态内部类。静态内部类定义在类内部的静态类,就是静态内部类。public class Outer {private static int radius = 1;static class StaticInner { public void visit() {原创 2020-11-03 09:32:42 · 118 阅读 · 0 评论 -
java抽象类和接口的区别
抽象类是用来捕捉子类的通用特性的。接口是抽象方法的集合。从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。相同点接口和抽象类都不能实例化都位于继承的顶端,用于被其他实现或继承都包含抽象方法,其子类都必须覆写这些抽象方法不同点参数 抽象类 接口声明 抽象类使用abstract关键字声明 接口使用interface关键字声明实现 子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现 子类使用impleme原创 2020-11-03 09:11:39 · 339 阅读 · 0 评论 -
面向对象五大基本原则是什么
单一职责原则SRP(Single Responsibility Principle)类的功能要单一,不能包罗万象,跟杂货铺似的。开放封闭原则OCP(Open-Close Principle)一个模块对于拓展是开放的,对于修改是封闭的,想要增加功能热烈欢迎,想要修改,哼,一万个不乐意。里式替换原则LSP(the Liskov Substitution Principle LSP)子类可以替换父类出现在父类能够出现的任何地方。比如你能代表你爸去你姥姥家干活。哈哈~~依赖倒置原则DIP(the Dep原创 2020-11-03 09:04:05 · 1171 阅读 · 0 评论 -
面向对象和面向过程的区别
面向过程:优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。缺点:没有面向对象易维护、易复用、易扩展面向对象:优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护缺点:性能比面向过程低面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。面向对象是模型化的,你只需抽象出一个类,这是一个封原创 2020-10-30 16:35:25 · 658 阅读 · 0 评论 -
java 重要关键字
Java 有没有 gotogoto 是 Java 中的保留字,在目前版本的 Java 中没有使用。final 有什么用?用于修饰类、属性和方法;被final修饰的类不可以被继承被final修饰的方法不可以被重写被final修饰的变量不可以被改变,被final修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变的final finally finalize区别final可以修饰类、变量、方法,修饰类表示该类不能被继承、修饰方法表示该方法不能被重写、修饰变量表示该变量是一个原创 2020-10-30 16:33:31 · 102 阅读 · 0 评论 -
解析Redis 高并发原理
1 单线程模型Redis客户端对服务端的每次调用都经历了发送命令,执行命令,返回结果三个过程。其中执行命令阶段,由于Redis是单线程来处理命令的,所有每一条到达服务端的命令不会立刻执行,所有的命令都会进入一个队列中,然后逐个被执行。并且多个客户端发送的命令的执行顺序是不确定的。但是可以确定的是不会有两条命令被同时执行,不会产生并发问题,这就是Redis的单线程基本模型。2 单线程模型每秒万级别处理能力的原因(1)纯内存访问。数据存放在内存中,内存的响应时间大约是100纳秒,这是Redis每秒万亿级别原创 2020-10-27 15:20:30 · 602 阅读 · 0 评论 -
2.9.JVM 类加载机制
JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程。2.9.1.1. 加载加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的 java.lang.Class 对 象,作为方法区这个类的各种数据的入口。注意这里不一定非得要从一个 Class 文件获取,这里既可以从 ZIP 包中读取(比如从 jar 包和 war 包中读取),也可以在运行时计算生成(动态代理),也可以由其它文件生成(比如将 JSP 文件转换成对应的 Class 类)。2原创 2020-10-27 14:31:39 · 93 阅读 · 0 评论