- 博客(108)
- 资源 (1)
- 收藏
- 关注
原创 Semaphore类
1.简介信号量通过一组许可证来控制对共享资源的访问。如果需要,可以用acquire()方法获取许可,如果许可为0,那么会进行阻塞,通过使用release()方法释放许可,把许可归还给Semaphore,归还之后,阻塞的线程优惠醒来尝试获取许可。2.api简介Semaphore(int permits):非公平模式创建;Semaphore(int permits, boolean fair):可以指定是否公平模式创建;acquire():尝试获取1个许可,如果没有许可则阻塞,可以被中断停止等待;
2020-06-03 14:49:43
557
原创 CyclicBarrier类
1.简介可循环利用的屏障。它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。作用:会让所有线程都等待完成后才会继续下一步行动。2.使用场景需要所有的子任务都完成时,才执行主任务,这个时候就可以选择使用CyclicBarrier。3.主要方法public int a
2020-06-03 14:18:07
271
原创 类CountDownLatch的使用
1.简介允许一个或多个线程等待,直到在其他线程中执行的一组操作完成为止。一个CountDownLatch初始化为给定数。该await方法将阻塞,直到由于该countDown()方法的调用导致当前计数达到零为止,此后所有等待线程都被释放,并且随后的任何awaitreturn 调用都将立即释放 。这是一种一次性现象-无法重置计数。如果您需要用于重置计数的版本,请考虑使用CyclicBarrier。2.例子//线程类public class GetDataStatusThread extends Thr
2020-06-03 11:09:22
235
原创 redis常见的缓存问题(穿透、雪崩、击穿)
redis缓存穿透简介null值问题。缓存数据先从缓存查询,再从数据库查询。如果key值不存在,则从db中获取。这样大量的请求,缓存失效,给服务器造成压力。解决方法方法一:key值不存在的也保存在缓存中,设置短的过期时间,缓解db的压力。方法二:布隆过滤器,即对一定不存在的key进行过滤。把所有可能的key值放到bitmap中,查询时根据bitmap过滤。redis缓存雪崩简介...
2020-04-27 17:33:08
237
原创 redis持久化机制
1.什么是redis持久化?redis持久化是在指定时间间隔内,将redis内存中的数据写到磁盘中,如果redis服务器宕机了,可以从磁盘上读数据到内存中,从而恢复数据。2.redis持久化的方式2.1RDB方式 原理:linux虚拟机fork一个子进程,负责将rdb中的数据写到临时的rdb文件中。此时住进吃继续对外提供读写的功能,当子进程中的数据与主进程的数据完全一样时,用临时文件替换持...
2020-04-21 20:21:24
325
原创 redis的分布式锁
1.分布式锁单应用中使用锁:(单进程多线程)synchronize、ReentrantLock分布式应用中使用锁:(多进程多线程)分布式锁是控制分布式系统之间同步访问共享资源的一种方式2.分布式锁的实现方式基于数据库的乐观锁实现分布式锁基于zookeeper临时节点的分布式锁基于Redis的分布式锁3.分布式锁的注意事项互斥性:在任意时刻,只有一个客户端能持有...
2020-04-21 12:36:38
214
原创 单例模式的双重检测
1.一般的单例模式如下:class Singleton{ private static Singleton singleton; private Singleton(){} public static Singleton getInstance(){ if(singleton == null){ singl...
2020-04-07 17:56:58
4779
原创 shiro注解解决按钮级别权限的校验
1.spring容器中注入shiro的权限解析器<!--权限处理器,主要是用来处理传过来的权限信息的,里面只有一个方法 --><bean id="userPermissionResolver" class="com.xdja.cssp.ecss.web.shiro.UserPermissionResolver"></bean>2.UserPermissi...
2020-04-07 17:48:10
583
原创 redis配置文件详解
配置文件:redis.conf1.设置保护模式默认:protected-mode:yes开启保护模式后,所有的外部ip都不能访问,只能本机访问。2.设置外网访问链接默认:bind 127.0.0.1设置外网访问控制方法:1.注释掉 #bind 127.0.0.1 并把protected-mode no2.设置为0.0.0.1:bind 0.0.0.1 并设置密码,可以不关保护模式。...
2020-03-31 22:08:00
186
原创 redis的安装
redis下载地址:https://github.com/MSOpenTech/redis/releases1.解压tar包2.make注意:如果make报错的话 大家就可以看一下是不是报没有gcc的错 如果是报没有gcc的错,那就要先安装一个gcc3.yum install gcc-c++4. make distclean注意:安装好gcc之后最好执行一下make distcle...
2020-03-31 21:33:30
126
原创 java中内存泄漏的问题
1.什么是java中的内存泄露内存泄漏定义:无用对象持续占有内存或无用对象的内存得不到释放,从而造成内存空间的浪费。满足的条件:1.对象与GCROOT的节点相连,不是垃圾对象;2.对象是无用的这些对象不会被GC所回收,然而它却占用内存内存泄漏的根本原因:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄漏,尽管短生命周期对象已经不再需要,但是因为长生命周期持有它的引用而导...
2020-03-26 19:40:00
247
原创 java如何判断一个对象是否存活
1. 引用计数法引用计数器法:每个对象设置一个引用计数器,当对象被引用,计算器加1,当引用失效,计算器减一。当计数器为0时,表示引用失效,也就是"死对象",可以被垃圾回收机制回收。缺陷:无法解决循环依赖的问题。有两个对象A、B。当A引用B,B引用A时,那么此时A、B对象都不为0,垃圾回收机制无法被回收。2. 可达性算法(引用链法)从GCRoot开始向下搜索,如果一个对象没有与任何引...
2020-03-26 19:19:08
1397
原创 类加载机制
1.原理 JVM将class文件字节码文件加载到内存中, 并将这些静态数据转换成方法区中的运行时数据结构, 在堆(并不一定在堆中,HotSpot在方法区中)中生成一个代表这个类的java.lang.Class 对象, 作为方法区类数据的访问入口。2.过程 VM类加载机制分为五个部分:加载,验证,准备,解析,初始化.初始化条件:1、使用new关键字实例化对象、访问或者设置一个类的静...
2020-01-13 16:17:22
192
原创 String中intern方法的作用
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...
2019-08-30 15:04:16
321
原创 HttpClient的HttpGet、HttpPost、HttpPut、HttpDelete工具类
//Http的get请求方法public static String httpGet(String listenIp, String service, JSONObject jsonStr) { String saveProxyUrl = "http://" + listenIp +":8080" + service; CloseableHttpClient cl...
2019-06-26 16:40:28
567
原创 jdbc获取mysql、oracle数据库的表、字段、主键、唯一索引
根据数据库的四大参数获取指定库中的所有表//根据数据库的参数获取指定库中的所有表 public static List<Map<String, String>> getDbTables(String driver, String url, String user, String pwd) { Connection conn = null; ...
2019-04-29 10:51:17
3074
转载 IDEA版本控制工具VCS中使用Git,以及快捷键总结(不使用命令)
场景介绍:工作中多人使用版本控制软件协作开发,常见的应用场景归纳如下:假设小组中有两个人,组长小张,组员小袁场景一:小张创建项目并提交到远程Git仓库场景二:小袁从远程Git仓库上获取项目源码场景三:小袁修改了部分源码,提交到远程仓库场景四:小张从远程仓库获取小袁的提交场景五:小袁接受了一个新功...
2019-01-07 09:39:45
636
4
转载 Intellij idea怎么将项目导出成war包
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-e4c7a3727d.css"> <div class="htmledit_views">1.窗口项目配置:右击项目->Ope...
2018-10-17 11:32:08
4517
1
原创 ztree的创建和勾选
<div id="div_tree" class="people_list mt10" style="width:100%;overflow:auto;"> <ul id="mytree" class="ztree"></ul> </div>
2018-10-17 11:24:02
254
转载 配置Log4j(很详细)
来自: http://www.blogjava.net/zJun/archive/2006/06/28/55511.htmlLog4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可...
2018-09-26 15:03:07
174
转载 Tomcat启动过程原理详解
基于Java的Web 应用程序是 servlet、JSP 页面、静态页面、类和其他资源的集合,它们可以用标准方式打包,并运行在来自多个供应商的多个容器。Web 应用程序存在于结构化层次结构的目录中,该层次结构是由 Java Servlet 规范定义的。W...
2018-09-13 22:00:51
473
1
原创 实现一次更新多条数据
实现用一条sql去更新多条语句的前提是多条语句的条件不同,但是更新的字段及字段的值都是相同的,这样才能去更新。public void updateMoreNumber(String[] ids){ StringBuffer sb = new StringBuffer("update task update_time = :update_time, flag = :flag where ...
2018-04-08 17:33:45
7238
转载 Tomcat的overview界面浅析
Server Locations配置有三个选项: 1. Use workspace metadata (does not modify Tomcat installation);2. Use Tomcat installation (take control of Tomc...
2018-04-04 10:54:49
694
转载 the import cannot be resolved问题
原文出自百度1、clean项目,重新编译项目。【解决】一般使用eclipse/myeclipse的菜单 project -> clean ..可以解决。同时最好选中Build Automatically选项。2、若是没有解决,不要着急,继续来。重新导入jar包。【解决】右键项目->build path ->...
2018-03-29 09:58:41
10216
转载 hibernate级联查询执行n+1次sqlt语句问题(内含解决办法,优化方式)
如果当SQL数据库中select语句数目过多,就会影响数据库的性能,如果需要查询n个Customer对象,那么必须执行n+1次select查询语句,下文就将为您讲解这个n+1次select查询问题。在Session的缓存中存放的是相互关联的对象图。默认情况下,当Hibernate从数据库中加载Customer对象时,会同时加载所有...
2018-03-28 16:37:45
239
转载 ORACLE中CONNECT BY...START WITH...的使用
一、语法 大致写法:select * from some_table [where 条件1] connect by [条件2] start with [条件3]; 其中 connect by 与 start with 语句摆放的先后顺序不影响查询的结果,[where 条件1]可以不需要。 [where 条件1]、[条件2]、[条件3]各自作用的范围都不相同: [where 条件1]是在根
2018-02-01 10:55:53
302
原创 14.链表的倒数第k个节点
PS:这是一道出境率极高的题目,记得去年参加校园招聘时我看到了3次,但是每次写的都不完善。一、题目:链表的倒数第k个节点题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。 链表的节点定义如下,
2018-01-30 17:24:11
210
转载 对request.getSession(false)的理解(附程序员常疏忽的一个漏洞)
【前面的话】在网上经常看到有人对request.getSession(false)提出疑问,我第一次也很迷惑,看了一下J2EE1.3 API,看一下官网是怎么解释的。 【官方解释】 getSession public HttpSessiongetSession(boolean create)Returns the current HttpSession associated wit
2018-01-29 14:52:32
254
原创 [Err] 1093 - You can't specify target table 's1_test' for update in FROM clause
前提说明:数据库采用的是mysql。 数据库表格: 题目: 删除除了编号不同,其他信息都相同的冗余信息。 思路: 1.找出除了编号不同,其他信息不全相同的编号。 关键词:group by……having :分组查询,我对这个关键词的理解是:不同的行之间找出列相同的一项或者几项,几项都需要相同用逗号隔开。查询的几行值中如果还需要条件过滤,那么需要用having来过滤。 sq
2018-01-18 17:29:29
6185
原创 以activiti配置文件为例介绍Spring管理的bean工厂
配置工厂Bean 通常由应用程序直接使用new创建新的对象,为了将对象的创建和使用相分离,采用工厂模式,即应用程序将对象的创建及初始化职责交给工厂对象. 一般情况下,应用程序有自己的工厂对象来创建bean.如果将应用程序自己的工厂对象交给Spring管理,那么Spring管理的就不是普通的bean,而是工厂Bean. 得到对象的方式有两种: 1.调用getBean()方法,Sprin
2018-01-10 11:14:59
536
原创 验证mysql的自动提交事务和手动提交事务(java版)
个人理解的一个事物:是一个Connection一系列的操作过程,如果是两个Connection连接在操作,那就是两个事物。事物的前提:数据库的存储引擎是innodb。事物的目的:保证数据的安全性。事物安全: 1.自动提交事务:每执行一条sql语句,就同步到数据库中。 2.手动提交事务:执行一系列的sql语句后一起同步到数据库中。事物的四大特性: A(atomic):原子性,事务
2017-10-25 21:29:29
23666
2
原创 希尔排序算法(java版)
希尔排序:直接插入排序的改良版,威力更强。直接插入排序是每一移一个,比较相邻的两个希尔排序第一次分堆是 n = n / 2为一堆的,也就是下标为i的元素和下标为i + n/2,i + n/2 +… < n的元素作为一堆的,每次比较i 和 i + n /2 的元素,保证n[i] < n[i + n/2]第二次分堆 step = n / 4,每次加step词,保证 i + step + …的次序
2017-09-06 08:58:31
284
原创 直接插入排序(java版)
直接插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。 – 《大话数据结构》 package com.zhangyike.insertSort;import java.util.Arrays;import jav
2017-09-05 21:08:40
324
原创 堆排序算法(java版)
package com.duobang.headSort;import java.util.Arrays;import java.util.Random;public class MyHeapSort { public static void main(String[] args) { //随机产生count个元素的数组 Random rd = new Ra
2017-09-05 15:23:40
369
原创 大数相加问题(java版 )
两个大数相加,如果把数字转换成字符串,那么无论多大的数都可以相加了,将两位数做加法的过程用java代码模拟出来,那么这个问题就得到了解决。package com.zhangyike.bigNum;import java.util.Scanner;public class AndBigNumber { public static void main(String[] args) {
2017-08-04 09:34:30
804
原创 大数相乘问题(java版)
将两个大数保存到字符串中,他们相乘的结果也保存到字符串中,那么无论多大的数,都能够用这种方法去解决。首先看下我们数学上怎么去计算两个数字相乘的: 如果我们用程序把上面的过程写出来,那么这个问题就解决了。java代码如下:package com.zyk.model;import java.util.Scanner;public class BigNumMuti { public static
2017-08-03 20:31:53
602
转载 mybatis解决sql注入问题
sql注入大家都不陌生,是一种常见的攻击方式,攻击者在界面的表单信息或url上输入一些奇怪的sql片段,例如“or ‘1’=’1’”这样的语句,有可能入侵参数校验不足的应用程序。所以在我们的应用中需要做一些工作,来防备这样的攻击方式。在一些安全性很高的应用中,比如银行软件,经常使用将sql语句全部替换为存储过程这样的方式,来防止sql注入,这当然是一种很安全的方式,但我们平时开发中,可能不需要这种死
2017-07-28 15:44:07
2600
转载 如何解决sql注入的问题
Java防止SQL注入SQL 注入简介: SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法用户钻了SQL的空子,下面我们先来看下什么是SQL注入: 比如在一个登陆界面,要求用户输入用户名和密码: 用户名: ' or 1=1 -- 密 码: 点登陆,如若没有做特殊处
2017-07-28 15:38:12
1207
原创 将一个数转换成小于它的任意进制(java版)
//进制转换public class RadixChange1 { public static void main(String[] args) { Scanner can = new Scanner(System.in); try { String strs = can.nextLine(); //将输入的字符
2017-07-11 11:22:46
400
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人