- 浏览: 96474 次
- 性别:
- 来自: 青岛
最新评论
文章列表
redis是一个高性能的key-value数据库,支持消息提送功能,可以当做一个轻量级的队列服务器使用。
redis只是提供一个高性能的、原子操作内存键值队,具有高速访问能力,虽然可以做消息队列的存储,但不具备消息队列的任何功能和逻辑。
redis2.0开始支持发布/订阅指令,发布者调用redis的pushlish方法往特定的channel发送消息,订阅者在初始化的时候订阅该channel,有消息就会立即接收。
redis消息推送多用于实时性较高的消息推送,并不保证可靠。MQ保证可靠但有一些延迟。
redis发布订阅除了表示不同的topic外,并不支持分组。MQ发布消息,多个订阅者可 ...
HashMap如何实现线程安全
- 博客分类:
- java
1.使用HashTable
Map<String,Object> hashtable=new HashTable<>();
HashTable底层是数组和链表的形式,方法都是用synchronized修饰的,因此是线程安全的,但执行效率比较低。
2.使用java.util.concurrent.concurrentHashMap
Map<String,Object> concurrentHashMap=new ConcurrentHashMap<>();
concurrentHashMap结构图:
concurrentHa ...
Java实现多线程的方式
- 博客分类:
- java
1.继承Thread类
public class Demo extends Thread {
public void run() {
try {
System.out.println("thread");
} catch(Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] a ...
动态代理指为一个目标对象提供一个代理对象,并由代理对象控制对目标对象的引用。使用代理对象,是为了在不修改目标对象的基础上,增强目标对象的业务逻辑。通过动态代理可以无侵入的为代码进行增强。
动态代理应用非常广泛,比如spring中的aop使用动态代理增加,动态代理主要有JDK和CGLIB两种。
JDK实现动态代理由两个重要部分组成,分别是Proxy、InvocationHandler。
Proxy是所有动态代理的父类,提供了静态方法来创建动态代理的class对象和实例。
InvocationHandler,每个动态代理实例都有一个关联的InvocationHandler,在代理实例上调 ...
线程池的有点1.降低资源消耗,通过重复利用已创建的线程降低线程创建和销毁造成的消耗。2.提高响应速度,任务可以不需要等线程创建就能立即执行。3.提高线程可管理性,防止无限制创建导致的消耗系统资源、降低系统稳定性。使用线程池可以进行统一的分配、调优和监控。4.使用线程池可以有效控制最大并发线程数,提高资源利用率,避免过多资源竞争,避免阻塞。5.线程池可以提供定时执行、单线程执行、并发控制等,操作线程方便。6.new Thread不能重复使用,new 相当于在内存中单独开辟一个内存让线程运行,需要释放线程和新建线程,性能差。使用线程池,可以减少对象的创建、消亡的开销。
线程池简介
Jav ...
activiti会签直接写死人员
- 博客分类:
- 其他
设置:
${test.resolve(execution,"张三,李四")}
需要提供java方法:
@Component
public class Test {
/**
* 会签时,动态获取审批人
* @param execution
* @return
*/
public List<String> resolve(DelegateExecution execution, String value) {
System.out.println(val ...
delete执行速度优化
- 博客分类:
- 数据库
现象:delete子查询非常慢,但select非常快,如下:
select * from test1 where uid in (select uid from test2)-- 非常快
delete from test1 where uid in (select uid from test2)--非常慢
改成join表就很快了
delete t1 from test1 t1 inner join test2 t2 on t1.uid=t2.uid
超时,默认1秒;
修改请求超时时长:
application.yml:
hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 3000
1.集群定义:集群是指用一组服务器运行一到多个应用程序。
集群可以简单到只有两台服务器,在他们之间配置故障切换,如果一台服务器失效,由另一台服务器接管应用程序的处理。集群也可以用来运行复杂的分布式系统:应用程序将数据分割成多个可管理的部分,每个部分都可以独立进行处理。如果一台服务器失效,其他服务器不会受影响,失效节点的进程被重新分配到集群中的其他节点。
2.集群的分类
故障切换集群、分布式数据库系统故障切换集群又可以分为两类:(主动/被动集群、主动/主动集群)
主动/被动集群:任何时候都只有一台服务器拥有负载,辅助服务器以被动模式运行,时刻等待着主动服务器停机进而接管主服务器,它 ...
Java数据流分为两种:字节流(Byte)和字符流(Character)。
字节流:以8位为单位对二进制数据进行操作,这些类都是InputStream和OutputStream的子类。
InputStream 所有字节输入流的父类,定义了基础的读取方法。
OutputStream 所有字节 ...
业务场景:项目拆分微服务,恰巧鄙人负责几个基础的服务,各种对接其他服务。到后期运维,接各种锅:我调用你接口了,你那数据不对。我传递是这个参数,你那处理的有问题......。只好加上日志记录,业务场景就是:防止背锅!
1.定义注解
package com.haier.hwork.qwrgqk.business.annotation;
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @int ...
MQ
1.消息队列可以简单理解为:把要传输的数据放在队列中。用来降低Web服务器因发送消息而导致的负载和延时问题。
2.为什么用MQ(MQ优点):解耦、异步、削峰/限流、高可用、防数据丢失。
1)解耦举例:订单系统下单,需要 ...
pom:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
yml:
spring:
rabbitmq:
host: ip
port: 5672
virtual-host: /
username: 账号
password: 密码
...
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-08-27 11:37:10.017 ERROR 22436 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed
org.springframework.context.ApplicationContextExceptio ...
springboot项目,上传文件,报错:the temporary upload location [/tmp/tomcat.4519862041770988807.8082/work/Tomcat/localhost/ROOT] is not valid
原因:springboot上传文件,或默认创建/tmp/tomcat.*文件夹,上传要先转换成临时文件写入这个文件夹下,这个文件夹如果长时间没有访问会被系统自动删除,大概10天。
如果长时间没有上传文件,那超过10天上传,可能会找不到这个文件夹。
解决:
1.重启项目,会重新创建文件夹。
2.yml中添加配置,指定路径,serv ...