自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 ACM在线判题系统(OJ)判题接口,对外提供HTTP POST请求

ACM独立判题服务开源项目地址:github可针对性的添加判题语言,或者修改判题细节判题语言支持:GCCGNU C90GNU C99GNU C11G++GNU C++98GNU C++11GNU C++14GNU C++17Java 1.8python2.7python3.6JavaScriptC#RubyGO判题接口POST http:/...

2019-04-17 15:18:51 2480 2

原创 ACM在线判题系统(OJ)的判题实现(java+python)

学院一直是有一个自己的oj的,但是由于最近判题崩了,需要修复一下,拿到判题代码,打开却是一手node.js,让我一个搞Java的着实懵逼,因为以前学过点js,摸清判题逻辑,一步一步console.log来调bug,最后还是太复杂,把心态调崩了。最后想了了想判题就是那个流程,还是自己写一个吧,而且以前的判题只支持python2,现在谁要用python2啊。好吧,直接开始开发:判题需要几个步骤:...

2018-11-03 17:36:57 13144 9

原创 简介

以前自己用ssm后端框架+jq+css+html写了一个blog网站,放在阿里云服务器上,由于服务器昂贵,虽说学生特惠的时候买了两年。现在还有一年的时间,想着总有服务器到期的时候,那我在上面写的点点滴滴怎么办呢,还是都一直把blog写在这里吧,这样就不用担心过期的事情了。欢迎访问我的个人网站,wangzhengyu.cn。...

2018-06-25 16:48:42 128

原创 参数校验插件

参数校验工具包工具说明:参数校验插件,注解式的标记参数的限制(为空、参数长度、取值范围),可以代替很多冗杂的if判断,比如:public void hello(String host, User user) { if (host == null || host.length() == 0) { throw new IllegalArgumentException("host can'...

2019-08-13 23:50:56 314

原创 redis 主从复制 哨兵机制进行切换,结合jedis自动切换

redis安装首先安装gcc:sudo apt-get install gcc下载安装redis:wget http://download.redis.io/releases/redis-4.0.8.tar.gztar xzf redis-4.0.8.tar.gzcd redis-4.0.8makesudo make install模拟运行多机环境:启动多个进程,运行在不同...

2019-08-08 10:08:07 718

原创 jsonp、cookies实现单点登录(完全跨域)

单点登录实现的目标:在一个套系统的任意一个系统中登录之后,访问其他子系统能直接登录。在同一主域名下的所有系统可以共享主域名的cookies,所以再一台服务器中登录之后,将token信息存入到主域名下的cookies中,任意一个子系统访问会自动带上这个token信息,能达到单点登录的效果。这里主要实现完全跨域的情况下如何实现单点登录:也就是两个系统的域名完全分离,不能共用cookies信息,...

2019-06-25 13:21:18 5380 2

原创 spring-aop中对象MethodSignature的getParameterNames()返回结果为null

在项目中需要在aop中获取方法参数名和取值,方法名获取方法:public void verify(JoinPoint joinPoint) { //所有的参数和参数名 Object[] values = joinPoint.getArgs(); String[] names = ((MethodSignature) joinPoint.getS...

2019-06-16 21:59:41 20070

原创 Java实现LRU最近最少使用淘汰算法

一个HashMap存储缓存元素,同时元素间使用双向链表链接,链表保持使用次数从大到小排序,在get的时候更新链表,更新方法,从当前元素往前找到一个刚好比自己使用次数多的,将当前元素删除后再插入到这个元素的后面。比如 a使用3次,b,c,d,e都使用了2次,当前get(d)。那么d变为3,此时删除d,链表为a-3b-2 c-2 e-2,再讲d添加到a的后面,成为a-3 d-3 b-2 c-2 ...

2019-04-30 22:50:14 927

原创 关于Calendar的一些使用注意项

使用Calendar可以很方便得操作时间:输出周几,月份,年份:Calendar cal = Calendar.getInstance();cal.setTime(new Date());System.out.println(cal.get(Calendar.MONTH));//输出月份System.out.println(cal.get(Calendar.YEAR));//输出年...

2019-04-26 20:56:05 295

原创 Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar冲突问题

首先确定肯定是pom的依赖包冲突了,需要删一个,重点就是再哪儿去删掉,一个项目很多的依赖项的,怎么知道哪两个冲突呢?这里介绍一种方法:用idea打开项目的,点击右边的mavenProjects,在dependencies里面就有很多的依赖项,而且是有层次的,那就找到含有我们的log4的依赖项。以我这个为例,就有spring-boot-starter-web和另一个依赖slf4j-l...

2019-04-16 15:41:11 4009

原创 Java NIO聊天室(简单图形界面)

基于NIO实现的聊天室demo地址:github-chat流程:服务端服务器创建ServerSocket接受所有机器的连接,并设置读事件当有读事件触发,遍历可读事件,广播到selector中的所有连接输出流中客户端新建读线程:注册可读事件服务器广播到该channel ===>输出数据说明服务端代码可以放到远端外网服务器上,修改Client的连接地址就好!效果...

2019-03-22 16:20:15 1908 1

原创 关于count(*) 和count(id)的调优

从以前的博客中总结中的count(*) 和count(id)的区别就是:count(*)查询的是总条数,count(id)查询的是id非null的条数。再实际开发过程中,需要查询符合某个查询条件的总条数时,这两个有很大的查询效率区别;我开发过程中遇到了一个表有200多万条数据,需要查询某个条件的总条数时,对于上述两个细节的选择会产生很大的查询效率差异。表中有id,status,comp...

2019-03-19 17:34:26 5715 5

原创 字节跳动笔试编程题-二阶魔方

链接:https://www.nowcoder.com/questionTerminal/73de370854f141a29749bb036ffd0298?orderByHotValue=1&page=1&onlyReference=false来源:牛客网二阶魔方又叫小魔方,是2*2*2的立方形结构。每一面都有4个块,共有24个块。每次操作可以将任意一面逆时针或者顺时针旋转9...

2019-02-20 20:34:15 2041

原创 编写个人博客网站的一次经历

我是一直学习java后端开发的,于是想用所学知识写一个网站,记录自己的一些学习知识点或者生活点滴,注意是写,不是搭建,网上有很多的搭建网站教程,界面也多好看,但是为了巩固自己的知识,还是自己写比较好,也就是一个代码一个代码敲上去的。网站地址效果图:前端是做成了响应式,移动端:文章详情页:既然是web项目,那就采用前后端分离式开发,毕竟是当今主流,现在没谁还用jsp开发啦...

2019-01-17 15:52:07 5199 5

原创 ScheduledThreadPoolExecutor实现原理

ScheduledThreadPoolExecutor运作在ThreadPoolExecutor的基础上,自定义实现任务队列,每次take()拉取任务的时候,返回运行优先级最高的队首元素。构造函数:将自定义的阻塞队列作为参数放到ScheduledThreadPoolExecutor里面。 public ScheduledThreadPoolExecutor(int corePool...

2019-01-11 12:57:56 855

原创 JDK8中HashMap的resize()方法算法精髓

向HashMap的put添加元素过量的时候,hash结构会退化成链表。所以会有一个扩容机制来解决这种问题,扩容的步骤就是新建一个大一倍的数组,将旧的数组里面的所有节点重新计算放到新的数组里面。在jdk1.7中是重新计算节点新槽位的下标再插入,但是在1.8中是采用一种新的方式。关键源码:for (int j = 0; j < oldCap; ++j) { ...

2019-01-08 21:24:14 1393 1

原创 OJ判题核心实现(获取时间消耗、空间消耗)wait4、vfork实现

判题需要几个步骤:1.在linux搭建编译器环境:gcc g++ java python2 python3 pascal2.根据源码的类型创建相应的源文件(.c .cpp .java 等)3.编译对应的源文件4.运行程序,使用测试用例测试得出时间消耗和内存消耗。步骤中其实最难的就是第四步,怎么获得程序的时间消耗和空间消耗?有个思路:开线程运行该程序得到进程pid,然后主线程开个...

2019-01-07 23:23:25 4838 3

原创 JVM GC算法和垃圾收集器

算法:标记-清除:产生大量离散碎片复制算法:三个区域eden(大)+2*survivor(小);每次在eden新建对象,gc的时候复制到另外一个survivor中,清除以前的两个区域。标记-整理:压缩可用区域,将可用对象挤在一起垃圾收集器:Serial 收集器(新生代):单线程阻塞所有用户进程,采用复制算法清理新生代Serial Old 收集器(老年代):Serial的老年代收...

2019-01-05 19:24:59 220

原创 zookeeper相关知识点理解

zookeeper监听机制zookeeper客户端可以注册监听某个节点,然后在zookeeper中检测到节点变化的时候,那么会通知监听这个节点的客户端,监听原理,客户端开启一个线程,监听某个端口,然后将监听事件(ip,port,path)发送到zookeeper的监听器列表,zookeeper在节点该表的时候触发这个监听事件。节点读写的原子性节点的版本号随节点的更改而自增,当setDa...

2018-12-24 17:18:46 148

原创 zookeeper的javaAPI的增删查改和监听事件的持续监听

zookeeper的增删查改操作调用原生javaAPI实现,重点是对节点数据的监听,讲一下设计方案,把新加入的监听包装成一个类,主要属性有监听的具体节点路径和回调函数的具体操作。内部类:public static abstract class Subscriber { abstract String target(); abstract void process(Watched...

2018-12-23 09:29:16 481

原创 多线程、锁相关知识

多线程、锁线程池线程池的好处1.资源利用率变高了2.提高了响应速度3.利于管理线程实现原理(线程复用、管理线程):线程复用原理:解释:线程池中有几个工作类:本身是一个runnable,内部还有一个线程,启动线程也就是启动了本身;worker的任务就是不断从队列里面拉去任务,然后执行任务的run方法,也就是说每一个worker就是串行执行任务。管理线程实现原理:在Threa...

2018-12-21 14:06:04 139

原创 mysql(InnoDB)知识

mysql(InnoDB)1 数据库ACID原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)2 事务的隔离级别事务隔离级别脏读不可重复读幻读读未提交(read-uncommitted)是是是不可重复读(read-committed)默认否是是可重复读(repeat...

2018-12-20 15:26:08 317

原创 大数据量(10亿)的整数看是否有重复的

使用BitMap:用位存储每个数,比如1,2,3....,31,32这32个数那么可以用一个32位的int值state来存,1存到int的最低位bit位上,32则存到最高位的bit位上;比如检测5是否存在,那么看int值得第5位是否是1,也就是state>>(5-1) & 1,看是不是为1,如果为1,说明5存在,否则不存在,同时将5加进去。java实例代码:packa...

2018-12-19 14:49:31 1972

原创 生产者/消费者代码(使用notify和wait实现)

package cn.wzy.Lock;import java.util.Random;public class ConsumerAndProducer { static String[] food = new String[5]; static String take() throws InterruptedException { synchronized (food) {...

2018-12-18 17:08:13 479

原创 JAVA NIO知识点

NIOjava Non_blocking IO的学习Knowledge pointsChannel Buffer Selectorchannel和buffer从原来的面向数据字节流的模式改为现在面向通道的模式,一个通道可以指向一个输出流或者输出流, 而与程序直接接触的对象是buffer,也就是通道是我们操作的目标,buffer则是我们操作所用到的工具, 在程序中只需要读写bu...

2018-12-04 09:22:14 136

原创 JAVA使用字节流读取数据一定注意精确读取

使用InputStream读取文件数据,采用read(byte[])这个方法的时候,一般是如下方式:byte[] bytes = new byte[1024];File file = new File("G:\\NIO\\src\\cn\\wzy\\test.txt");InputStream inputStream = new FileInputStream(file);while ...

2018-11-30 08:42:41 1920

原创 前后端分离的项目,采用ssm后端接口权限校验

前后端分离的项目中,服务端对于每个请求都是一模一样的,对于每个用户的请求识别就需要用到一个统一的方式(jwt),然后在访问每个接口的时候先对这个jwt进行识别,查出这个用户的权限级别,检查是否拥有访问这个接口的权限,如果没有,那么将直接返回一个错误信息,表示权限不足,反之放过,继续往下执行。jwt就是一个包含用户信息的加密字符串:参考:JWT的生成及验证过程因为对于每个接口都需要进行权...

2018-11-28 15:41:10 3222

原创 C++常用数据结构备忘

1.优先队列(priority_queue):堆排序常用函数: push(value):放入元素 pop():删除优先级最高的元素 top():返回优先级最高的元素 #include <vector>#include<queue>#include <iostream>using namespace std;struct...

2018-11-25 13:51:41 189

原创 java操作mongodb根据关键字分组统计个数

部分需求需要在mongodb的集合中按照关键字分组并统计出个数,如:一个集合里是所有公司的信息,然后在前端页面中需要展示公司的分布情况,这时就需要后端对公司所在的城市分组求和,然后给出每个城市中公司的数量。这个操作就需要mongodb的聚合函数了(aggregate);举个例子,集合中有公司的city关键字,我们需要对city分组,然后求和。聚合命令:db.getCollecti...

2018-11-10 14:23:38 6372 2

原创 windows 10重装电脑后设置指纹提示已在其他账户上设置该指纹解决办法

机器自带指纹识别,但是在设置好了指纹之后重装系统,再次设置指纹提示,已在其他账户上设置该指纹,请尝试其他手指。以至于重装系统之后会有几个手指不能用,现在都是左手操作,特别不方便。这个问题在网上也没有太多解决方案,都是说重装驱动,删除指纹就好,我试过很多次,都不行。我发现一个问题:每次在设备管理器卸载指纹驱动,刷新一次又会自动安装一个默认的指纹驱动程序。原来windows10会自动安装默...

2018-10-21 19:17:57 11980

原创 kafka测试同一个消费组的多个消费者负载均衡实例(集成spring)

这里使用的是zookeeper和kafka3台机器的集群,这样能保证如过有一台机器炸了还能运行,在集群环境中,要在kafka的server.properties中配置zookeeper集群地址等信息,消息设置三个分区,这样一个分区由一个机器管,所以当kafka发消息的时候就会发送到每个机器上。如果是一个机器的话,就算多个分区数,那么日志文件还是会存放到一台机器上,还是能让消息实现分区保存。...

2018-10-17 09:15:30 7069 2

原创 redis中数据类型的常用命令

expire key 10(设置key的有效期为10秒)String:set key value;(设置key值为value值)setnx key value(设置如果不存在)setex key 秒数 valueget key(得到key的对象)getset key value(设置新值,返回旧值)mget key1 key2 key3(批量获取对象)del ...

2018-10-08 21:21:05 130

原创 dubbo-admin在jdk1.8运行404问题

dubbo-admin在jdk1.8以上没法用,需要对源码重新编译一遍。我编译好了一个:http://www.wangzhengyu.cn/blog2/ueditor/jsp/upload/file/20190112/1547282116395059873.zip在WEB-INF下修改zookeeper地址:dubbo.registry.address=zookeeper://i...

2018-10-03 15:24:33 820 6

原创 java存取redis采用RuntimeSchema序列化工具类高效转化及理解

在java中利用jedis操纵redis,这里外加jedis的线程池高效管理资源:mvn配置jedis和序列换工具类的依赖: <!--jdedis依赖--> <dependency> <groupId>redis.clients</groupId> <art...

2018-10-02 10:31:43 3045 1

原创 java 内存结构、GC

一:内存结构  1:程序计数器:当前线程的执行字节码的行号,记录运行情况;2:虚拟机栈:记录当前线程的局部变量、操作数栈、方法出口等信息;3:本地方法栈:保存本地方法的栈信息,与虚拟机栈的区别就是虚拟机栈保存java运行信息;4:堆(分新生代,老年代):线程共享区域,存放对象实例对象,所有的java实例基本都在这里,是gc的主要区域,又称“GC堆”;5:方法区(永久...

2018-09-19 09:26:23 157

原创 java反射的getDeclaredFields和getFields

java反射中,获取字段属性有两种方法,getDeclaredFields和getFields。下面通过例子展示不同之处:Person类:package cn.wzy.FieldAndMethod;/** * @author wzy 不短不长八字刚好. * @since 2018/9/14 9:39 */public class Person { private St...

2018-09-14 10:17:17 1022

原创 对java中String的存储以及new String()的理解

创建String很特别:有两种String s = "abc"; String s = new String("abc");字符串的存储也是很特别的,存储分两种:第一种的创建方式是在编译的时候把“abc”存到字符串常量池(这个涉及到jvm的内存模型),可以看成一个特殊的堆内存;第二种创建方式会在运行期间生成一个String对象,这时候是把它存到堆内存,像其他普通对象的创建一样。就是因为...

2018-09-09 17:21:24 306

原创 分六步实现手写spring-mvc框架与DI依赖注入

 springmvc主要包装了servlet,使每次的新添请求不用到web.xml里面去手动加,主要解决的问题就是把请求路径和开发写的controller层方法绑定起来。最近看了一波spring-mvc的原理解析视频,大概理解一一下springmvc的大致工作原理和工作流程。为了加深对spring-mvc的理解,自己也手写了一波spring-mvc。其实核心的东西就几点,把请求的url...

2018-09-02 17:13:10 458

原创 多线程之栅栏CyclicBarrier

栅栏和闭锁功能类似,都是控制线程是否马上继续执行下去。区别就是:闭锁是让所有线程等待一组事件发生之后才能继续执行下去,而栅栏就是等待一组线程到达之后才继续执行下去。就拿建筑工地举例:闭锁相当于大门,所有工人等待大门打开这个事件发生之后才能继续通过;而栅栏就是相当于一个接送车,每一个工人就是一个线程,等到车上上满之后,也就是指定的人到齐之后,车才能发动。而栅栏相对闭锁的区别还有一点就是栅栏可...

2018-08-28 15:10:40 476

原创 多线程之闭锁CountDownLatch

闭锁可以理解为要达到一组需要完成的步骤之后才能让所有线程继续往下走;就像一个学校大门,所有的学生都想放学回家都堵在门口,这时候必须等到保安做完他的事才能放行(比如说上厕所),完事之后,一开大门,所有的学生(线程)才能通过大门,继续走。这里写了一个很好理解的一个demo:package cn.wzy.regextest;import java.util.concurrent.Coun...

2018-08-13 14:26:02 181

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除