java
top啦它
这个作者很懒,什么都没留下…
展开
-
电商项目设计
秒杀业务流程图_00。原创 2023-01-28 16:24:14 · 226 阅读 · 0 评论 -
图片图片图片
图片原创 2023-01-27 19:34:00 · 74 阅读 · 0 评论 -
csdn博客系统
这个系统中存在虚拟货币,可以在商店购买流量(提高文章热度),还可以进行转账,为了提高系统响应速度以及避免出现死锁,我破坏了形成死锁条件,在获取交易双方的信息的时候,按照id进行排序,然后按序拿竞态资源,为了避免发布文章时进行转账导致锁冲突的偶然事件,我设定了一种新的字段(用来记录“可用文章数量”),在商店中可以通过这个数量来兑换虚拟货币,当发生锁冲突的时候提示“缺货,正在补货”。并且为了避免系统压力过大(毕竟是一个小服务器),没有开发私聊功能,并且在聊天室中发送消息是有时间限制的,每10秒才可以发送一次。原创 2023-01-27 19:25:32 · 219 阅读 · 0 评论 -
ArrayList和LinkedList的区别。
从结构来看ArrayList内部是一个Object数组,LinkedList则是一个双向链表。也正是因为数据结构的特点,A在尾部进行add、delete操作时时间复杂度为O(1),但是在中间则需要对数据进行copy,性能是比较差的;而L对于这种写操作性能是比较好的,仅仅修改对应node中指针的引用即可,对于读操作,如果指定具体的下标位置的话,A的性能比较好(随机访问)。在空间占用方面A仅仅可能在尾部存在未存储数据的空间,而L则是因为Node节点需要维护双线链表,引用较多造成的空间占用比较大。原创 2023-01-14 14:00:04 · 54 阅读 · 0 评论 -
ArrayList和Vector的区别。
ArrayList和vector都是list的实现类,前者是线程不安全的,后者虽然打着线程安全的旗号,但事实是vector并不能保证线程安全,vectot的线程安全是通过加锁来实现的,使用关键字对非静态方法进行修饰,那么也仅仅是对多个线程调用同一个方法起到线程同步的作用,但事实是开发者再使用list的时候难免会出现delete和add都是用的情况,因为锁的对象不一致,就会出现vector所维护的数组数据出现不可预估的状态。然后arrayList扩容一次1.5倍,相较于vector的2倍来说更加平滑。原创 2023-01-14 13:33:40 · 184 阅读 · 0 评论 -
netty有哪些应用场景?
注册中心比如dubbo,用netty实现一些信息传输,心跳什么的。消息队列也可以使用netty。个人也可以做一个http服务器啥的,而且netty也可以实现ssl,做好之后用浏览器试试。还可以用来做IM系统,都是可以的,而且很方便。netty的应用场景很广泛,有些比较有名气的框架多多少少都使用了netty来实现网络交流。具体来说,可以用netty来实现一个。原创 2023-01-12 15:52:07 · 844 阅读 · 0 评论 -
说一下你对netty的理解
netty是一个优秀的网络编程框架,操作系统根据五层模型开发了各种各样的协议,然后为了方便开发者使用,对协议进行了包装,也就是socket,但是直接使用socket开发难度比较高,容易出现内存溢出或者性能不佳、难以维护和扩展等情况。netty本身支持多种io模型,而且对部分应用广泛的协议做了实现,比如http、ftp、ssl等,他的可扩展性很高,应用的功能(具体什么功能,就比如解码编码,加密解密,数据包的解析等等)通过一批channelhandle来实现,并且对下层协议的粘包分包等特性做了相关的优化实现。原创 2023-01-12 14:34:57 · 97 阅读 · 0 评论 -
什么是CAS
简单来说,cas就是比较并交换,它是一种用户态不涉及进程上下文切换的一种无锁的保证数据原子性的操作。它的原子性始在硬件层面通过lock前缀和比较并切换指令来实现的。在java层面的实现是Unsafe里面的compareAndSwapObject、conpareAndSwapInt、compareAndSwapLong,这三个方法都是native修饰的,也就是jvm层面实现的。用的时候按顺序给他传对象实例,字段偏移量,预估值,更新值,来使用。他在硬件方面的实现,主要就是对字段偏移量的操作,这个字段偏移量就是对原创 2022-07-07 22:40:38 · 222 阅读 · 1 评论 -
spring startup
首先引入依赖。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>启动类: SpringApplication application = n原创 2022-04-23 19:50:54 · 802 阅读 · 0 评论 -
当对象为null时,如何toString()
package aa;import org.apache.commons.lang3.StringUtils;import java.util.Objects;public class AADemo_4 { public static void main(String[] args) { User1 user1 = new User1("xiaowang",17); User1 user11 = null; System.out.print原创 2022-04-21 20:14:30 · 3435 阅读 · 0 评论 -
重写hashCode和equals方法
本文已参与「新人创作礼」活动,一起开启掘金创作之路。首先写入三个学生,学生的唯一标识是学号。import java.util.HashMap;public class AADemo_2 { public static void main(String[] args) { HashMap<Student,String> map = new HashMap<>(); Student student1 = new Student("1号",1原创 2022-04-17 22:01:43 · 727 阅读 · 0 评论 -
接口幂等性
本文已参与「新人创作礼」活动,一起开启掘金创作之路。一、什么是接口幂等概念接口幂等性就是用户对于同一个接口发起的一次请求或者多次请求的结果是一致的,不会因为多次请求而产生不同的结果。案例用户购买商品后需要进行支付,支付扣款成功,但是返回结果的时侯报网络异常,此时钱已经扣了,用户不知道并再次点击支付按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现扣了两次款,多扣钱了,流水记录也生成了两条,这其实就没有保证接口的幂等性。增删改查涉及的幂等性问题查询操作select * fro原创 2022-04-16 23:01:11 · 4620 阅读 · 0 评论 -
java String的intern()方法
本文已参与「新人创作礼」活动,一起开启掘金创作之路。本文章所用jdk版本为jdk1.8先看第一个例子public class HelloWorld { public static void main(String[] args) { String s1 = new String("hello") + new String("world"); s1.intern(); String s2 = "helloworld"; Syste原创 2022-04-15 21:19:43 · 2362 阅读 · 0 评论 -
Mybatis(3)
二级缓存为什么有了一级缓存后,还需要有二级缓存呢?二级缓存是应用级缓存,也使得它具有更多的存储方式(redis,内存),而一级缓存只能在内存中存储数据。并且二级缓存存储的是应用整个生命周期的缓存,所以必须限制它的容量。既然要限制它的容量,就要有数据淘汰的机制。而一级缓存是不需要考虑这些的。二级缓存的组件结构...原创 2022-04-14 12:53:19 · 678 阅读 · 0 评论 -
Mybatis(2)
一级缓存的作用域默认情况下,一级缓存的作用域是Session(会话级别的)源码如下:它一共有两种级别,源码如下:现在我将他的级别修改为STATEMENT。修改mybatis-config.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/m原创 2022-04-13 16:21:02 · 905 阅读 · 0 评论 -
Mybatis(1)
JDBC执行流程https://blog.csdn.net/YJT180/article/details/99828947Mybatis执行流程详细来看就是首先学习会话和执行器两部分Mybatis核心执行组件——会话(SqlSession)首先先看Executor最简单的实现——SimpleExecutor先引入Mybatis <dependency> <groupId>org.mybatis.spring.boot&l原创 2022-04-12 23:53:21 · 711 阅读 · 2 评论 -
java深拷贝
https://www.bilibili.com/video/BV1A54y1d7ZLhttps://www.cnblogs.com/xinruyi/p/11537963.html转载 2022-04-02 15:01:45 · 128 阅读 · 0 评论 -
concurrenthashmap
有参构造后第一次put时会进行初始化。初始化的容量并不是所传入的数。源码: public ConcurrentHashMap(int initialCapacity) { if (initialCapacity < 0) throw new IllegalArgumentException(); int cap = ((initialCapacity >= (MAXIMUM_CAPACITY >>> 1)) ?原创 2022-03-27 16:25:50 · 288 阅读 · 0 评论 -
equals
基本类型没有equals方法。但是这些基本类型的包装类具有equals方法。Objects中的equals public boolean equals(Object obj) { //判断是不是同一个引用对象,而不是对象中定义变量的内容。 return (this == obj); }eg:public class Car { Integer a; public Car(Integer a) { this.a = a;原创 2022-03-25 15:21:40 · 312 阅读 · 0 评论 -
什么是线程组,为什么在Java中不推荐使用?
转载 2022-03-08 20:47:50 · 438 阅读 · 0 评论 -
Java中用到的线程调度算法是什么?
转载 2022-03-08 20:42:00 · 308 阅读 · 0 评论 -
CountDownLatch和CyclicBarrier
作者:一团捞面链接:https://www.jianshu.com/p/333fd8faa56e来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。CyclicBarrier 是什么?从字面上的意思可以知道,这个类的中文意思是“循环栅栏”。大概的意思就是一个可循环利用的屏障。它的作用就是会让所有线程都等待完成后才会继续下一步行动。举个例子,就像生活中我们会约朋友们到某个餐厅一起吃饭,有些朋友可能会早到,有些朋友可能会晚到,但是这个餐厅规定必须等到所有人到齐之后才会让我转载 2022-03-08 20:16:06 · 50 阅读 · 0 评论 -
为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法?
转载 2022-03-08 19:58:59 · 122 阅读 · 0 评论 -
什么是Callable和Future?
转载 2022-03-08 18:36:20 · 228 阅读 · 0 评论 -
什么是Executors框架?
转载 2022-03-08 18:31:09 · 183 阅读 · 0 评论 -
什么是阻塞队列?阻塞队列的实现原理是什么?如何使用阻塞队列来实现生产者-消费者模型?
阻塞队列是一个在队列基础上又支持了两个附加操作的队列。2个附加操作:支持阻塞的插入方法:队列满时,队列会阻塞插入元素的线程,直到队列不满。支持阻塞的移除方法:队列空时,获取元素的线程会等待队列变为非空。阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里取元素的线程。简而言之,阻塞队列是生产者用来存放元素、消费者获取元素的容器。ArrayBlockingQueue一个由数据结构组成的有界阻塞队列LinkedBlockingQueue一原创 2022-03-08 18:19:57 · 398 阅读 · 0 评论 -
ArrayBlockingQueue源码分析
构造方法:方法作用add增加数据,如果阻塞队列为满,则返回falseput增加数据,如果阻塞队列为满,则等待poll无超时时间如果队列为空,则返回nullpoll有超时时间如果队列为空,则等待时间,超过等待时间,仍然为空,则返回nulltake在取出数据时,如果队列为空,则会等待remainingCapacity返回队列剩余容量size返回队列中数据的长度remove取出队列中指定的Objectcontains返回队列中原创 2022-03-08 18:07:09 · 198 阅读 · 0 评论 -
lock.lockInterruptibly()
lock.lockInterruptibly();当与它争抢锁的线程释放锁或者与它争抢锁的线程中断后,他会获得锁。package fangfa;import java.util.Vector;import java.util.concurrent.locks.ReentrantLock;public class Son{ public static void main(String[] args) throws InterruptedException { Reentra原创 2022-03-08 17:35:11 · 481 阅读 · 0 评论 -
什么是Callable和Future?
转载 2022-03-08 15:46:44 · 104 阅读 · 0 评论 -
CountDownLatch
https://www.cnblogs.com/Lee_xy_z/p/10470181.html转载 2022-03-07 17:46:05 · 48 阅读 · 0 评论 -
静态方法如何使用非静态变量?
public class MyTest7 { int a = 1; public void asa(){ final MyTest7 myTest7 = new MyTest7(); System.out.println(myTest7.a); }}原创 2022-03-04 16:26:11 · 228 阅读 · 0 评论 -
char能保存中文吗?
可以,不过如果某些不在Unicode编码字符集中的文字不能被保存在char中。原创 2022-03-04 16:18:02 · 1556 阅读 · 2 评论 -
你知道那些设计原则?
转载 2022-03-04 16:15:54 · 69 阅读 · 0 评论 -
JDK里面带的工具你知道哪些?
转载 2022-03-04 16:15:06 · 1076 阅读 · 0 评论 -
基本数据类型bit长度
转载 2022-03-04 16:11:28 · 466 阅读 · 0 评论 -
什么是面向对象,谈谈你的理解?
https://zhuanlan.zhihu.com/p/93123305面向对象: 一种基于面向过程的新编程思想,顾名思义就是该思想是站在对象的角度思考问题,我们把多个功能合理放到不同对象里,强调的是具备某些功能的对象。具备某种功能的实体,称为对象。面向对象最小的程序单元是:类。面向对象更加符合常规的思维方式,稳定性好,可重用性强,易于开发大型软件产品,有良好的可维护性。在软件工程上,面向对象可以使工程更加模块化,实现更低的耦合和更高的内聚。...转载 2022-03-04 16:07:44 · 244 阅读 · 0 评论 -
介绍Spring MVC的工作流程?
转载 2022-03-04 14:22:09 · 52 阅读 · 0 评论 -
Java面向对象包括哪些特性,怎么理解的?
继承package Test1;//继承public class One { int age; int name; public void eat(){ System.out.println("父亲在吃饭"); }}package Test1;public class One1 extends One{// 方法重写 @Override public void eat() { System...转载 2022-03-04 13:54:09 · 111 阅读 · 0 评论 -
开启一个线程的方法?
public class MyTest4 extends Thread{ @Override public void run() { System.out.println("start"); try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } Sy.原创 2022-03-04 13:22:19 · 182 阅读 · 0 评论 -
jdk1.7和jdk1.8中ArrayList空参构造的源码基础分析。
不对,最后一句分析错了。 private void ensureCapacityInternal(int minCapacity) { if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) { minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity); } ensureExplicitCapacity(minCapaci..原创 2022-03-04 09:17:43 · 283 阅读 · 0 评论