java · 第 4 页

从宏观的角度了解Shiro——Shiro学习(1)

一、shiro主要做什么? 1. 身份验证 2. 授权访问 3. 加密 4. 会话管理 二、shiro权限框架的基本开发路线 无论是spring-security还是shiro,权限框架的基本开发路线是围绕“当前用户是谁?这个用户能做什么?”这两个问题进行的。 三、核心概念*1. Subject 主

redis缓存与数据库保持一致

使用redis缓存,通常会考虑到与数据库数据保持一致的问题。 ` public void update(){ updateCache();//更新缓存 updateDb();//更新数据库 } ` 这段代码中,如果更新缓存失败了会抛出异常,那么数据库就不会被更新,缓存一致性得到保障。但是如果

记一次JMX远程连接失败的问题

今日测试服上发现了一个堆内存问题,想要用jvisualvm远程连接jmx过去查看,但是发现连接失败了。 我赶紧查看服务器上的jvm参数,参数正常—— ` -Djava.rmi.server.hostname=192.168.12.17 -Dcom.sun.management.jmxremote.p

SpringBoot配置文件的继承性和覆写性

项目运行环境有三种,开发环境、测试环境、生成环境,在springboot项目中对应着三个配置文件,application.properites,application-dev.properites, application-prod.properites。 在部署时,用命令运行springboot的

session-count-1.0发布

近期写了一个jar包,放在了maven中心仓库,主要用途是:可在普通tomcat项目、springboot项目、spring-security项目上获取在线用户数量的java组件。 详细的原理介绍和用途、用法在我的另一篇博客中有写——[SpringBoot、security获取在线用户数量]()。

浅谈Mysql 索引原理

本文主要参考自: [https://zhuanlan.zhihu.com/p/113917726]() 为什么需要索引? 假设有1000条数据,id是1、2、3、...1000,如果没有索引,那么查找id=1000的记录,需要从1到1000遍历所有记录,查找效率极低。 怎样的数据结构适合做索引 很

理解CAS

简介 众所周知,synchronize能够保证数据操作的原子性,从而实现同步效果。但是这种通过多个线程竞争锁的方式其效率会比较差,于是java另外实现了另一种无锁的却能保证数据操作原子性的方式——CAS(Compare-and-swap)。 CAS的原理 Compare-and-swap,是一个针对

并发工具类的同步器

本文介绍JDK中并发工具类的各种同步器,倒计时门闩(countdown latch)、同步屏障(cyclic barrier)、交换器(exchanger)、信号量(semaphore)以及phaser同步器。 一、倒计时门闩 java.util.concurrent.CountDownLatch同

关于join()的一个小坑

很多情况下,主线程创建并启动子线程,如果子线程中要进行比较耗时的运算,并且希望主线程等待子线程执行完毕之后再执行。那么就可以使用join()方法,它是线程类Thread的一个用于等待线程对象销毁的方法,底层是wait()方法。 join()的使用比较简单,但是有个小坑需要注意一下。 下面看这个例子:

通过管道进行线程间通信

管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据。一个线程发送数据到输出管道,另一个线程从输入管道中读数据。通过管道,实现不同线程间的通信,而无须借助类似共享变量、临时文件之类的东西。 在java的JDK中提供了4个类来使线程间可以进行通信: ` 管道字节流 Piped

回顾经典:生产者与消费者模式

等待/通知模式最经典的案例就是“生产者/消费者”模式。但此模式在使用上有几种“变形”,还有一些小的注意事项,但原理上都是基于wati/notify的。《Java多线程编程核心技术》 案例——1对1的生产者与消费者模式 创建一个消费者和一个生产者,生产者每生产一个产品,消费者就会去消费这个产品。在没有