- 博客(68)
- 资源 (1)
- 收藏
- 关注
原创 根据freemark模板生成静态html字符串
pom <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>生成方法 private String generateHtml(String temp
2021-05-28 09:54:05
209
原创 Springboot集成fastDFS
pom <dependency> <groupId>net.oschina.zcx7878</groupId> <artifactId>fastdfs-client-java</artifactId> </dependency>配置文件xuecheng: fastdfs: connect_timeout_in_seconds: 5
2021-05-28 09:48:15
215
原创 FastDfd安装
tracker 安装1、要安装 gccyum install gcc-c++2、安装 libeventyum -y install libevent3、安装 libeventyum -y install libevent4、安装 libfastcommonlibfastcommon 是 FastDFS 官方提供的,libfastcommon 包含了 FastDFS 运行所需要的一些基础库。将 libfastcommonV1.0.7.tar.gz 拷贝至/usr/local/下cd
2021-05-24 22:37:13
195
1
原创 redis分布式锁
加锁 /** * * @param conn * @param lockName 所名称 * @param acquireTimeout 重试时间 * @param lockTimeout 过期时间 * @return */public String acquireLockWithTimeout( Jedis conn, String lockName, long acquireTimeout, long lockTimeout) {
2020-11-17 21:39:23
264
原创 redis集群实现文章点赞投票
import com.alibaba.fastjson.JSON;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import redis.clients.jedis.JedisC
2020-11-04 22:22:35
208
原创 No way to dispatch this command to Redis Cluster because keys have different slots.
解决办法 :所有的集合和有序集合key都加一个前缀,是的所有的数据都在一个redis集群的终端。 private static final String prefix = "luffi:lbl"; private static final String KEY_SPLIT = ":"; //用于隔开缓存前缀与缓存键值 //将文章放入时间排列表中 jedisCluster.zadd("{" + prefix + KEY_SPLIT + "}" + "time", Double
2020-11-04 21:16:26
8126
3
原创 redis使用docker搭建集群以及扩容和收容
搭建集群创建redis‐cluster.tmpl配置Redis信息【端口、是否开启集群等】创建 redis-cluster.tmpl 配置Redis信息#端口 port ${PORT} #非保护模式 protected-mode no #启用集群模式 cluster-enabled yes cluster-config-file nodes.conf #超时时间 cluster-node-timeout 5000 #主机ipcluster-announce-ip 192.168.8
2020-10-12 23:27:50
370
1
原创 redis6x单机安装和集群安装踩的坑
单机安装的时候make出现错误1、升级gccyum -y install gcc gcc‐c++ libstdc++‐develyum ‐y install centos‐release‐scl devtoolset‐7 yum ‐y install devtoolset‐9‐gcc devtoolset‐9‐gcc‐c++ devtoolset‐9‐binutils2、切换gcc7scl enable devtoolset‐7 bash安装redis make报错 zmalloc.h:5
2020-10-12 21:52:29
105
原创 敏感词处理算法
public class Minganci { static Map mgcMap = new HashMap<>(); public static void add(String mgcs) { //{"广":{"isEnd":"0,"告":{"isEnd":"1","词":{"isEnd":"1"}}},"告":{"isEnd":"0,"诉":{"isEnd":"1"}}} //广告,广告词,告诉,哈哈 String[]
2020-09-27 17:33:25
637
原创 负载均衡最小连接数
/** * * 1 * 2 3 * 4 5 6 7 *永远去第一个进行访问 访问过后将访问次数+1,然后从新排序 * 排序方式: * 永远之和当前节点的两个子节点进行比较, * 如果访问次数大于左边、小于右边,就和左边的交换位置 * 如果访问次数大于左边也大于右边,那么就和右边交换位置, *
2020-09-24 17:16:41
633
原创 RabbitMq过期时间注意事项
RabbitMq过期时间设置有两种方式,为整个队列设置过期时间和为每个消息设置过期时间为队列设置过期时间Map<String, Object> args = new HashMap<String, Object>();args.put("x-message-ttl", 60000);channel.queueDeclare("myqueue", false, false, false, args);为每个消息设置过期时间byte[] messageBodyBytes =
2020-09-09 18:08:46
478
原创 饥饿线程
定义如果一个线程因为CPU被其他线程全部占有而始终抢不到CPU的运行时间,那么这个线程就是饥饿线程。实例由于线程t1的优先级为9,线程t2的优先级为1(最低),造成t2很难抢到CPU的运行时间。import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.ReentrantReadWriteLock;public class HungryThread{ ReentrantReadWriteLock rea
2020-09-08 20:42:55
271
原创 ThreadLocal原理
概念ThreadLocal并不是用来解决多线程下的共享变量问题,而是提供县城内的线程访问。在多线程环境下,可以保证各个线程之间的变量相互隔离。使用public class ThreadLocalDemo implements Runnable{ private static ThreadLocal<Integer> threadLocal = new ThreadLocal<>(); public void run(){ for (int i =
2020-09-08 09:41:55
129
原创 线程池状态及原理
线程池状态RUNNING:初始化状态是RUNNING.。线程池一单被创建,就处于RUNNING状态,并且线程池中的任务书为0。RUNNING状态下,能接受新的任务,以及对已经添加的任务进行处理。SHUTDOWN:SHUTDOWN状态时,不接受新的任务,但能处理已经添加的任务。代用线程池的shutdown()接口时,线程池有RUNNING->SHUTDOWN。STOP:不接受新任务,不处理已经添加的任务,并且中断正在处理的任务。调用线程池的shutdownNow()接口时,线程池有(RUNNIN
2020-09-07 11:37:05
340
原创 redis 计数器
在监控应用程序的同时,持续地收集信息是一件非常重要的事情。那些影响网站响应速度以及网站所能服务的页面数量的代码改动、新的广告营销活动或者是刚刚接触系统的新用户,都有可能会彻底地改变网站载入页面的数量,并因此而影响网站的各项性能指标。但如果我们平时不记录任何指标数据的话,我们就不可能知道指标发生了变化,也就不可能知道网站的性能是在提高还是在下降。为了收集指标数据并进行监视和分析,我们将构建一个能够持续创建并维护计数器的工具,这个工具创建的每个计数器都有自己的名字(名字里带有网站点击量、销量或者数据库查询字
2020-09-04 16:21:43
3071
原创 AQS(AbstractQuenedSynchronizer)原理及应用
原理AQS使用一个int类型的成员变量state来表示同步状态,当state>0时表示已经获取了锁,当state=0时表示释放了锁,它提供了三个方法(getState()、setState(int newState)、compareAndSetState(int expect,int update))来对同步状态state进行操作AQS通过内置的FIFO同步队列来完成资源获取路线的派对工作,如果当前线程获取同步状态失败时,AQS则会将当前线程信息及等待状态等信息构造成一个节点(Node)并将其
2020-08-21 11:32:17
229
原创 JDK8接口的默认方法和静态方法
众所周知,在接口中定义的普通方法都是抽象方法,方法前面默认都hu会添加public abstract,不能有方法的实现,需要在接口的实现类中对方法进行具体实现。定义接口public interface MyInterface{ String abstractMethod();}接口的实现类public class MyInterfaceImpl implements MyInterface{ public String abstractMethod(){ return "execute
2020-08-07 21:25:13
410
转载 用P3P header解决iframe跨域访问cookie
浏览器的第三方 cookie 限制所谓第三方 cookie,就是说你访问网页 A,却接收到域名 B 的 cookie 设定指令。这可能是由于网页 A 请求或链接了 B 的网页,比如上面提到的 iframe 以及 jsonp。我查到了各个浏览器对于跨域的处理规则,可以看到第三方 cookie ,IE 在默认设置中是做了限制的。不同浏览器的第三方cookie规则IEFireFoxChromeSafariOpera限制第三方coookie是否否否否用户访问的流程
2020-07-22 09:55:30
554
原创 代理模式实现根据文件类型上传到不同的文件服务器
环境springboot2.1.15阿里oos服务器fastdfs服务器文件服务应用小文件 如图片上传到fastdfs上,大文件如视频上传到阿里云oos服务器上分布式文件代理服务器实现实现分析1、FileUpload抽象接口定义了上传方法,分别给他写了两种实现2、AliyunOOSFileUpload主要上传视频文件3、FastDfsFileUpload主要上传图片文件4、FileUploadProxy是 代理对象,主要供用户访问,调用了FileUpload的upload方法,为客
2020-07-19 16:41:55
466
原创 使用zookeeper实现自增主键
导入依赖<properties> <curator.version>4.2.0</curator.version> </properties> <!-- curator ZK 客户端 --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</arti
2020-07-15 21:50:02
1612
转载 查询oracle各个表所占空间大小
select t.segment_name, t.segment_type, sum(t.bytes / 1024 / 1024) AS MBfrom dba_segments twhere t.segment_type=‘TABLE’ and (t.segment_name like ‘%yyy%’ or t.segment_name like ‘%xxx%’)group by OWNER,t.segment_name, t.segment_type order by MB DESC快速清空表数据
2020-06-03 13:47:53
366
转载 Oracle表删除大量数据后查询变慢问题
Oracle 表删除大量数据后,即使表中只有几行记录,但用select count(*) from table 来查询发觉都不会马上出来,原因是该表的空间大了,查询起来很慢。解决的方法是把该表所占用的表空间缩小,或者说释放表空间。alter table XXXX move; 这样处理后就释放了表空间了。但是释放表空间后,表的行号rowid会发生变化,而基于rowid的索引则会变成无效。因此该操作后必须重建索引。否则会 提示“ORA-01502: 索引’SMP.ITEMLOG_MID_IDX’或这类索引的分
2020-06-03 13:46:12
531
转载 oracle表空间不足
Oracle表空间数据文件大小的限制由于Oracle的Rowid使用22位来代表数据块号,因此Oracle表空间数据文件每个数据文件最多只能包含2^22个数据块。也因此数据库表空间的数据文件不是无限增长的,例如:在数据块为8k的情况下,单个数据文件的最大容量为8K*2^22 = 32G同理,数据块为2K,数据文件最大约8G数据块为32,数据文件最大约16*8G故若达到这个最大容量之后,则即便是设置了自增长,也不是无限自增长,此时则需要为这个表空间添加数据文件当表空间不足时(1)设置文件的自
2020-06-03 13:44:22
304
原创 springboot配置druid监控
1、pom <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.s
2020-05-20 21:06:32
206
原创 springboot使用外置servlet容器原理
使用外置servlet容器1)、必须创建一个war项目;(利用idea创建好目录结构)2)、将嵌入式的Tomcat指定为provided;<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope>
2020-05-18 15:27:30
184
原创 springboot错误处理原理
配置错误处理路径@ConfigurationProperties( prefix = "server", ignoreUnknownFields = true)public class ServerProperties implements EmbeddedServletContainerCustomizer, EnvironmentAware, Ordered { //错误配置参数 @NestedConfigurationProperty private Error
2020-05-17 17:19:01
444
原创 springboot改变表单提交的方式
使用场景如果新增用post提交表单,修改用put提交表单,而且还想共用同一个页面,就可以使用这种方式html页面<form th:action="@{/user/emp}" method="post"><input type="hidden" name="_method" value="put" th:if="${bean != null}">如果bean存在,说明是修改,input就会起作用,如果是新增页面bean不是null这个input不会被编译。原理sprin
2020-05-16 19:58:26
930
转载 oracle导出表的办法
1.先进行表分析(一定要执行此步,否则查询空表可能不准确)select 'analyze table '||table_name||' compute statistics;' from user_tables;2.再查询哪些表是空的(此步可以省略,直接进行第三步)select table_name from user_tables where NUM_ROWS=0 order by ...
2019-12-04 14:58:58
550
原创 SchedulingConfigurer动态定时
@Configuration@EnableSchedulingpublic class CompleteScheduleConfig implements SchedulingConfigurer { @Mapper interface CornMapper{ @Select("select cron from cron limit 1") ...
2019-11-05 20:10:02
1348
2
原创 JPA API
EntityManagerFactory作用:EntityManagerFactory接口主要用来创建EntityManager实例 方法: createEntityManager():用于创建实体管理器对象实例 createEntityManager(Map map):重载方法,Map参数用于提供EntityManager的属性 isOpen():检查EntityManage...
2019-11-04 09:35:44
166
原创 springboot使用https访问
生成本地证书进入本地jdk安装路径下的bin文件夹找到keytool.exe 在此目录进入cmd输入命令 keytool -genkey -alias tomcat -keyalg RSA -keystore ./server.keystore 按照提示进行操作 输入密钥库口令:123456再次输入新口令:123456您的名字与姓氏是什么? [Unknown...
2019-11-04 09:34:45
322
原创 JPA关联关系
多对一/一对一一般有多的一方来维护关联关系, //映射单向 n-1 的关联关系//使用 @ManyToOne 来映射多对一的关联关系//使用 @JoinColumn 来映射外键.//可使用 @ManyToOne 的 fetch 属性来修改默认的关联属性的加载策略@JoinColumn(name="1的一方的id")@ManyToOne(fetch=FetchType.LAZ...
2019-11-02 12:26:33
209
原创 JPA注解
@Entity@Entity标注的java类为实体类,将映射到指定的数据库中@Table当实体类于映射的数据库表不同名时需要使用@Table标注来说明,常用属性是nama,值为改实体类所对应的的数据库表名@Id@Id标注的属性为数据库的主键列,也可标注在该属性的getter方法之前@GeneratedValue@GeneratedValue用于标注主键的生成策略,通过s...
2019-11-01 19:16:41
157
原创 插入排序
/** * 插入排序法 * 原理 打扑克牌 起牌的时候新上来一张牌,和之前的相比,找到合适的 位置放入 */public class Version { public static void main(String[] args) { for (int k = 0; k < 1000; k++) { int[] arr = Px...
2019-09-21 15:50:50
128
原创 冒泡排序法
import java.util.Arrays;/** * 冒泡排序 */public class Version1 { public static void main(String[] args) { for (int k = 0; k < 1000; k++) { int[] arr = PxUtils.newArr(10);...
2019-09-21 14:04:06
135
原创 选择排序之每次挑出最大值和最小值
public class Version2 { public static void main(String[] args) { //准备数据 int[] arr = newArr(15); int[] arr1 = Arrays.copyOf(arr, arr.length); System.out.println("原素...
2019-09-19 20:55:05
1521
原创 线程池中线程和队列
线程池中的队列分两种,有界队列和无界队列,当使用有界队列的时候,新加入一个任务会先判断核心线程是否有空闲的,如果有,就直接使用线程执行,如果没有,会看看有界队列是否已满,如果未满,则将任务加入有界队列中,等核心线程有空闲的时候再去从队列中获取执行,如果有界队列已满,这个时候就会看看正在运行的线程数是否大于最大线程数,如果不大于,则创建新的线程执行这个任务,如果大于,则执行拒绝策略。当使用无...
2019-09-10 13:56:40
615
原创 redis事务执行
事务提供了一种将多个命令打包,一次性按顺序执行的机制,并且事务在执行期间不会主动中断(服务段在执行完事务中的所有命令之后才会执行其他客户端的其他命令),redis通过MUTIL、DISCARD、EXEC和WATCH四个命令实现事务操作。事务执行:开启事务multi,这个命令唯一做的是将客户端的REDIS_MUTIL选项打开,让客户端从非事务状态进入事务状态写入命令当客户端进入事...
2019-08-11 16:38:20
337
原创 redis的批量操作Pipline
Pipline大量提高了批量写入redis的效率直接上代码使用spring测试配置类 @Bean public JedisPoolConfig JedisPoolConfig() { JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(1000); ...
2019-08-10 19:16:57
185
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人