技术模块
文章平均质量分 72
a617332635
专注java开发80年
展开
-
docker集群部署rabbitmq
进入三个节点里,执行apt-get update,执行apt-get install y vim,如果y不允许则去掉。2、docker拉取rabbitmq:docker pull rabbitmq:3.7-management。6、在任意节点添加策略:当主节点宕机,所有队列未消费的消息复制到从节点。从节点加入主节点://其他节点同理。docker集群部署rabbitmq。1、自行安装docker。原创 2022-09-27 14:26:41 · 578 阅读 · 0 评论 -
java架构之mybatis缓存机制
Dao接口的工作原理,参数不同时方法能重载吗 Dao接口就是指mapper接口,接口的全限名,接口的方法名就是映射文件的id值,接口方法的参数,就是传递给sql的参数,调用接口方法时,接口全限名+方法名拼接作为key,能定位唯一的mappedStatement,mybatis中的每一个sql都会被解析成mappedStatement—》map<String,mappedStatement> 不能重载、因为全限名+方法名 工作原理是jdk动态代理,使用jdk动态代理为dao生成代理类,拦原创 2021-03-15 15:43:09 · 257 阅读 · 2 评论 -
Java架构之定时任务使用场景
Timer Timer(String name,Boolean isDaemon)设置线程名称,并色泽true时表示以守护线程执行 Schedule(TimerTask,delay)只调度一次延迟delay毫秒后执行 Schedule(timertask,date)调度一次在具体时间执行 Schedule(timertask,delay,perio循环调度,在delay之后开始,每个period执行一次 Schedule(Timertask,date,period)循环,在到了date时间原创 2021-03-11 11:13:09 · 1023 阅读 · 0 评论 -
Java架构之开发中考虑并发的场景
三个线程,怎样保证第二个在第一个执行完后执行,第三个在第二个执行完在执行 线程start后调用join实现,join相当于把并行改成串行,停止当前主线程 去执行join线程,join线程执行完后在接着直接主线程 Lock接口比较synchronized reentrantLock jdk实现,能够响应中断lockinteruptibly、支持超时获取锁trylock(time)拿不到锁会等待一会儿、非阻塞的获取锁trylock不管拿到锁没都返回,高并发下更优 Synchronized jvm实原创 2021-03-11 11:12:27 · 284 阅读 · 0 评论 -
java架构之开发中反射使用场景
在运行过程中,对于任意一个类,都可以获取其的方法和属性,对于任意一个对象,都能调用它的方法,这种动态调用类的方法就叫反射 class加载过程 获得反射入口 Class.forName 类.class 对象.getClass 通过Class,可以获取class类的成员属性,利用反射实例化对象,再用该对象调用方法 工厂模式 由工厂代为生成类对象 动态代理 基于jdk:用多个类实现一个总接口,一个代理类实现invocationHandler执行invoke方法,main中实例化代理类,原创 2021-03-11 11:11:52 · 130 阅读 · 0 评论 -
Java架构之redis集群使用场景
性能和并发、分布式 让所有请求先访问缓存,如果缓存有数据,就不访问数据库,没有数据再访问数据库,适用于sql’请求次数多,但结果不经常改变 缺点 高并发下缓存与数据库一致性的问题 原因:先删缓存后更新数据库,删缓存成功更新数据失败,导致缓存没有数据,db是旧数据;先更新数据成功后删缓存失败,导致缓存是旧数据 解决:分布式锁、选择先更新数据再删缓存+消息队列弥补删缓存失败重试 Setex key seconds value设置key并设置过期时间 Expire原创 2021-03-11 11:10:47 · 249 阅读 · 2 评论 -
java架构之nginx使用分析
特定 内存小、高性能高并发,可实现负载均衡,跨平台,web服务器和反向代理服务器 转发规则、反向代理规则、动静分离 Location拦截所有资源,proxy_pass转发到tomcat的地址 Server{ Listen 80; Server_name localhost; Location / { proxy_pass http://127.0.0.1:8080; } } 让动态网站中根据规则把不...原创 2021-03-11 11:10:04 · 163 阅读 · 1 评论 -
java架构之feign与http的区别
feign、http,有时候在调用第三方api的时候、使用httpclient,别人的接口不可能提供它的配置,自己项目框架是spring的,使用feign相互配置,都是okhttpclient的方式。Feign是一个接口声明式调用框架,实现了一个抽象层的逻辑,没有真正实现底层http请求,提供了一个client接口用于实现底层http操作,默认提供的实现是基于httpurlconnection,也有基于apachehttpclient的实现,且feign具有分布式负载均衡功能 feign的两种使用方法原创 2021-03-11 11:09:30 · 10644 阅读 · 1 评论 -
Java架构之切点切面增强器使用场景
关键字 @controllerAdvice 中包含了@component组件,所以能被扫描到 @aspect切面、@pointCut切入点、@before前置、@after后置、@around环绕、@afterthrowing异常抛出通知,切面修饰的类用组件注解 切点切面 切面修饰类,切入点修饰方法,通知修饰方法,切面由切点+通知 切点和通知一般传入五种参数 非环绕通知参数joinpoint、环绕通知参数proceedingjoinpoint、注解参数、返回值参数Object、thro原创 2021-03-11 11:08:40 · 571 阅读 · 0 评论 -
java架构之锁常用的使用场景
锁分类悲观锁Synchronized、lock 适用于写的场景乐观锁atomicInteger、cas算法 适用于读的场景行/表/页锁表锁开销小加锁快不会死锁并发最低、行锁开销大加锁慢会死锁并发最高、页锁加锁时间介于前两个之间会死锁并发一般偏向锁锁一直被一个线程占用,没有其他线程竞争情况下,该线程可自由获取该锁,降低获取锁的代价轻量级锁其他线程获取该锁,发送了竞争,锁就会由偏向锁升级为轻量级锁,其他线程会通过自旋尝试获取锁,不会阻塞从而提高效率,这种锁不能替代重量级原创 2021-03-11 11:08:01 · 1356 阅读 · 0 评论 -
java架构之过滤器监听使用场景
shiro、security认证用的过滤器较多禁止浏览器缓存所有动态页面(资源) response.setDateHeader("Expires",-1); response.setHeader("Cache-Control","no-cache");response.setHeader("Pragma","no-cache"); 设置为-1就是不缓存,如果设置为时间,表示缓存多久,需要实现Filter接口实现url级别的权限判断(权限放行) 使用shi...原创 2021-03-11 11:06:30 · 165 阅读 · 1 评论 -
java架构之token登录使用
与redis,shiro相比的优点在于,token可以更好的解决session共享的问题,单点登录更简单。 数据库中不保存任何用户信息,只根据密钥来判断是否登录,因为jwt框架中有三段信息:header、payload、密钥签名验证。 用户登录后生成的token是一个json字符串,其中包含了用户信息,过期时间,refresh_token的标识,refresh_token的过期时间,token和refresh_token互相验证过期,其中一个没过期就刷新另一个token,保证用户在操作的时候不会突然过期原创 2021-03-11 11:05:02 · 400 阅读 · 1 评论 -
解析java中的原子操作
1.在多线程中,我们常常会同时去处理一个数据。如:在并发时,执行count++这样的操作,那么很有可能会出现多个线程同时修改数据时,在拿到count值时都是一样的,然而有些线程可能已经修改了count++操作,那么有的线程拿到的count值就是不对的。对于上面的问题有两种解决办法,一种是使用同步锁,一种是调用本地方法实现原子性。本次只说说如何处理一个变量的原子性。在说上面的问题前,需要...原创 2019-06-26 14:42:03 · 166 阅读 · 0 评论 -
springboot的ApplicationListener与contextRefreshedEvent之间的关系
1.applicationListener总是和contextrefreshedevent相对出现在spring的ioc容器初始化完成后,ioc容器会发布一个事件的动作,从AbstractApplicationContext类中的protected void finishRefresh() {initLifecycleProcessor();getLifecycle...原创 2019-06-25 13:34:41 · 2161 阅读 · 1 评论 -
微服务的十个设计点
1.负载均衡+api网关2.无状态化,区分无状态化和有状态化3.数据库的横向扩展「分布式部署,底层节点主备,负载均衡,qs自动切换,读写分离」4.缓存5.服务拆分和服务发现6.统一配置中心7.统一日志中心8.熔断、限流、降级9.全方位监控10.服务编排和弹性伸缩...原创 2019-06-17 14:43:12 · 202 阅读 · 0 评论 -
ArrayList底层原理
1.新建一个类,声明一个不变的默认数组大小num,一个不参与序列化的数组object[] array,一个最大数组上限值max,一个size计算数组大小2.声明一个没有初始值的构造函数,将数组array={};3.声明一个有初始值initSize的构造函数,将数组array=new object[initSize];4.先从add添加方法执行走,第一步判断是有初始值的构造函数还是没有初...原创 2019-06-13 15:18:13 · 525 阅读 · 0 评论 -
java反射技术
反射的作用就是让我们能够更好的获取类、对象中的属性,反射最好的运用就是.class文件反编译为.java文件。java中反射的实现步骤: 1.获取被反射的类:Class c =Class.forName("");2.新建类的实例化:Objecto = c.newInstance();3.获取类中所有属性: Field[] fs = c.getDeclaredFields();原创 2017-06-22 11:06:57 · 205 阅读 · 0 评论 -
jdk——FileFilter文件过滤接口的应用
实现FileFilter接口, 首先FileFilter接口中只有一个方法accept(File Pathname)先看代码:package cn.edu.java;import java.io.File;public class Test { public static void main(String[] args) { File file=new File("F:\\原创 2017-06-22 15:32:54 · 466 阅读 · 0 评论 -
java——annotation接口
annotation接口详解跳转链接:点击打开链接转载 2017-06-23 09:16:44 · 415 阅读 · 0 评论 -
Nutz中那些好用的工具类
import net.sf.json.JSONArray;import net.sf.json.JSONObject;import org.nutz.http.Http;import org.nutz.http.Response;/** * 发送Get请求并且获取返回的JSONObject * @author yuzhiqiang * */public class HttpGe原创 2017-07-03 14:50:26 · 1348 阅读 · 0 评论 -
微信公众号支付——预支付订单
1.需要一个可以登陆微信商户平台的账号,此账号是服务号并开通了微信支付,商户在申请开通时,客服会发送邮件到你的邮箱,上图中有几个重要信息:商户号和appid,务必记住商户号和appid。其中登陆账号和密码用于登陆微信支付首页点击打开链接2.点击上图中的下载api证书,设置api密码。这个证书主要在微信支付api中需要证书的地方使用中的退款等功能提示需要证书。注:什么时候原创 2017-07-03 16:13:53 · 10599 阅读 · 0 评论 -
websocket聊天室
环境:eclipse即可WebSocket技术的优点有:1)通过第一次HTTP Request建立了连接之后,后续的数据交换都不用再重新发送HTTP Request,节省了带宽资源;2) WebSocket的连接是双向通信的连接,在同一个TCP连接上,既可以发送,也可以接收; 3)具有多路复用的功能(multiplexing),也即几个不同的URI可以复用同一个WebSocket连原创 2017-06-24 10:21:00 · 335 阅读 · 0 评论 -
mongodb——数据库增删改查
利用dos命令操作mongodb数据库1.需要在系统环境变量中配置好mongodb下的bin路径,配置再path里2.正式开始启用mongdb数据库时,需要先启动mongdb服务,跟启动mysql服务一个道理3.开启mongod服务,在mongdb的bin路径下输入以下命令:就是在bin路径下输入:mongod --dbpath (创建的db路径)这个dos窗口就是启动的m原创 2017-07-04 10:35:09 · 317 阅读 · 0 评论 -
mongodb--java连接数据库实现增删改查
1.新建一个maven项目,导入 junit junit 3.8.1 test org.mongodb mongo-java-driver 2.10.1 o原创 2017-07-04 11:59:11 · 824 阅读 · 0 评论 -
java——获取客户端真实ip地址
package cn.edu.GetTrueIp;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import java原创 2017-07-05 09:40:21 · 361 阅读 · 0 评论 -
本地图片转为base64数据
1.使用FileReader字符流读取本地图片,该对象自带一个方法readAsDataURL(args)2.因为该方法需要一个参数,这个参数就input标签(type=file)选取图片后的该对象,用getElementById获取这个input标签即可,参数为:ElementId.files[0];这个就是文件对象,将这个对象放入字符流中返回一个reader对象。3.通过这个对象,可以将读取的b...原创 2018-05-25 15:58:52 · 8023 阅读 · 0 评论 -
关于用笔记本或台式机安装制作服务器
1.首先判断自己是内网还是外网,百度查看ip,和本机电脑上的ip地址,若两个相同,则是外网,否则是内网。2.有三种方式实现搜索外网域名访问自己的网站。第一种,在有独立ip下, 在tomcat下的serve.xml下修改端口,connector标签上的8080端口修改为80端口,在engine标签下的host标签,修改成自己电脑的ip地址,最后将context标签的docbase属性改为你的工...原创 2018-05-16 14:45:35 · 926 阅读 · 0 评论 -
解析jdk源码第一天
java.* 对外开放的开发接口,有向后兼容的特点;当有新版本的jdk时,旧版本的jdk依然可以正常运行。一般更新jdk的时候也不会更新javax.* 也是java标准库的扩展,将这些东西弄成一个库是为了不让java标准库过大。一般的扩展包都是在这。com.sun.* 是java.*和javax.*的实现类,一般不推荐使用这个包的类,因为其他jdk中的可能不会有这个包,那么就可能不...原创 2018-12-13 17:04:17 · 356 阅读 · 0 评论 -
关于rpc实现远程过程调用、dubbo+zookeeper配合实现
1.随便下载个zookeeper.zip,此框架主要是dubbo的服务注册中心。可以单独将这个框架放在一个服务器,通过ip给服务提供者和服务消费者远程连接2.单独开两个idea,分别按顺序执行服务提供者、服务消费者左边是服务提供者:可以看到在配置文件中含有protocol;右边是服务消费者,只有简单的链接到zookeeper的服务器地址我这里是本地测试,有服务器的可以将lo...原创 2019-05-20 14:39:28 · 1833 阅读 · 1 评论 -
Java——cglib代理与jdk动态代理
动态代理的作用:在不修改代码下,可以使用动态代理对方法进行增强,可以在方法执行前后进行如日志等操作。先看代码:jdk动态代理:package cn.edu.uest; public interface UserService { public String getName(String name); public String getAge(int age); }原创 2017-06-22 10:40:30 · 225 阅读 · 0 评论