Java相关
Wayss_S
Java程序员。技术交流,工作推荐,欢迎交流。
展开
-
国际化项目方法参数的设计
背景最近公司业务做了国际化,此篇记录一下我们在做国际化时参数的设计。满足如何在改动尽量小的情况下,使原有接口满足国际化项目的需求。需求分析与设计谈到国际化,首先想到就是需要页面支持多语言,当然,这是最基本的,并且,要支持页面的多语言的话,后端接口方法之间互相调用需要传递什么额外的参数呢?方法参数设计参数传递之间需要包含下面几个信息:国家;站点,如果一个国家有多个区域或者多种语言,就...原创 2019-10-20 17:40:23 · 349 阅读 · 0 评论 -
Java读取解压zip文件
Java读取解压zip文件import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.nio.charset.Charset;import java.util.zip.ZipEntry;import j...原创 2019-09-12 20:15:55 · 418 阅读 · 0 评论 -
Java爬虫jsoup访问CSDN博客
背景看到CSDN上面的部分博客,写了好几年,访问量依然只有几十,于是想,写个爬虫,模拟人来查看博客,达到访问量增加的目的。理论知识CSDN博客的阅读数是如何增加的?当一篇博客在一台电脑上被访问时,该博客的阅读数+1,但是,在1分钟内连续多次访问,阅读数只加1。jsoup用法jsoup可以很方便的用JS的选择器功能,对于了解前端知识的人来说,非常方便查找页面上某个DOM元素。官网:ht...原创 2019-07-05 22:51:57 · 435 阅读 · 0 评论 -
swagger注解的简单使用
关于Java Web配置swagger的方法看这一篇:https://blog.csdn.net/qq1332479771/article/details/91399208本篇,就要介绍下在一个XXXController.java中,swagger的常用注解怎么用。直接看Demo 代码import io.swagger.annotations.Api;import io.swagger.a...原创 2019-07-01 22:25:44 · 624 阅读 · 0 评论 -
restful接口返回json的详细设计
在上一篇博客(https://blog.csdn.net/qq1332479771/article/details/91582151 )的参考下,总结出如下的返回值对象。import lombok.Data;/** * 前端数据返回体 * @author Wayss. */@Datapublic class ResponseMessage { /** * 响应码...原创 2019-06-13 22:02:59 · 4701 阅读 · 0 评论 -
restful json 返回值数据结构
转载:RESTful API返回结果设计经验与总结http://tutuge.me/2016/05/02/design-json-api-respoense/转载 2019-06-12 18:07:19 · 1985 阅读 · 0 评论 -
swagger java config document
转载: java web 项目使用swagger的document,restful apihttps://stackabuse.com/java-rest-api-documentation-with-swagger2/转载 2019-06-10 20:47:12 · 446 阅读 · 0 评论 -
Spring MVC返回Json对象时406错误
Spring MVC返回Json对象时406错误,解决方法:在工程的pom.xml中加入<!--springMvc使用@ResponseBody,如果返回的是json结果,需要添加jackson的jar包的依赖--> <dependency> <groupId>org.codehaus.jackson</grou...原创 2019-06-04 20:44:08 · 523 阅读 · 0 评论 -
一个Web程序的页面权限设计
需求现在有个需求,要给一个Web程序的每个页面增加权限,控制哪些人能够访问哪些页面。设计给人分配角色;角色上配置能访问的页面;人通过角色获取到能访问的页面;代码实现TODO,WebDemo的页面权限。...原创 2019-05-28 23:59:46 · 1692 阅读 · 3 评论 -
API接口与SDK工具的区别
SDK,Software Development KitSDK就是引入的jar包API,Application Programming InterfaceAPI就是jar内具体的某个类参考:SDK和API的区别? - 一丨的回答 - 知乎https://www.zhihu.com/question/21691705/answer/120029254SDK和API的区别? - Peng...原创 2019-05-27 08:45:50 · 2660 阅读 · 0 评论 -
OpenResty是什么
今天看到大佬分享的极客时间学习课程《OpenResty从入门到实战》,因此,了解一下关于OpenResty的知识。OpenResty由中国人章亦春发起,是一个可伸缩的基于Nginx的Web平台,使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,可以快速构造出足以胜任10K以上并发连接响应的超高性能Web应用系统。参考:https://www.runoob.com/w...原创 2019-05-23 22:46:54 · 9281 阅读 · 0 评论 -
Nginx和tomcat的区别
背景公司线上机器既有tomcat,又有Nginx,而作为Java程序员,平时我们更多关注的是tomcat,包括它的配置,jvm参数等。对于Nginx,只知道流量进入机器时会先通过Nginx。因此,这篇主要对比一下Nginx和tomcat。Nginx是什么?Nginx是一个HTTP Server,更多关心的是 HTTP 协议层面的传输和访问控制,常用做代理、负载均衡等功能。Nginx更多关...原创 2019-05-12 18:41:22 · 1836 阅读 · 0 评论 -
npm是什么
背景最近在学习elasticsearch的时候,学到elasticsearch-header时,其中讲安装方法时是这样的,git clone git://github.com/mobz/elasticsearch-head.gitcd elasticsearch-headnpm installnpm run start然后执行npm时需要安装sudo yum install npm。...原创 2019-05-12 18:40:22 · 1400 阅读 · 0 评论 -
Java工程中引入ES客户端
说明本篇在之前 ES入门介绍(https://blog.csdn.net/qq1332479771/article/details/79721566)的基础上,用Java程序连接并操作ES,本篇在连接前,需要满足ES已经安装好,并启动。引入方法引入服务端对应的版本的客户端,这里我的服务端是elasticsearch2.1.2。<!-- https://mvnrepository.co...原创 2019-05-09 21:52:58 · 1359 阅读 · 0 评论 -
查找maven中任意一个jar包被哪个包依赖
背景收到公司代码检测发来的消息,说是项目中引入的某个jar包版本过低存在安全问题,需要升级,但是,笔者硬是找了半天都没有找到是哪个地方引入了这个jar。现在问题就是需要找到是哪里引入的这个包,并将其排除。方法一:mvn dependency:tree命令# 打开cmd# 切换到代码库的主目录中# 执行如下命令mvn dependency:tree > C:\Users\way...原创 2019-04-23 20:57:15 · 9472 阅读 · 2 评论 -
调研:分布式调度任务
背景由于项目中目前使用的调度任务功能太过简单,不能查看哪些任务、在什么时候、运行是否完成,所以,便开始了对分布式调度任务的调研工作。开源的调度任务当当开源的elastic-jobhttps://github.com/elasticjob大众点评开源的xxl-jobhttps://github.com/xuxueli/xxl-job转载:这些优秀的国产分布式任务调度系统,你...原创 2019-04-19 11:53:56 · 329 阅读 · 0 评论 -
java查看垃圾收集器
背景在cmd下面通过命令查看JDK的默认垃圾收集器。做法切换到对应JDK的bin目录下;用命令java -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -version举例:JDK1.6JDK1.7JDK1.8转载:https://blog.csdn.net/xiaofait/article/details/17380703...转载 2019-04-12 10:42:37 · 2858 阅读 · 0 评论 -
Redis为什么快
Redis效率高的主要原因有下面几个:基于内存操作,速度非常快采用单线程,避免了上下文的切换导致消耗CPU、不用考虑各种加锁释放锁使用IO多路复用模型,非阻塞IOIO多路复用:一个进程,同时处理多个IO请求;(具体操作系统的实现原理略)...转载 2019-03-15 22:17:52 · 417 阅读 · 1 评论 -
Redis如何实现延时队列?
延迟任务延时任务,顾名思义,就是延迟一段时间后才执行的任务。我们先看看以下业务场景:当订单一直处于未支付状态时,如何及时的关闭订单,并退还库存?如何定期检查处于退款状态的订单是否已经退款成功?新创建店铺,N天内没有上传商品,系统如何知道该信息,并发送激活短信?等等实现方法 利用zset保存队列信息,按照时间戳存放,再启动一个任务,一直扫这个zset,判断当前时间和队列中的时间大小...转载 2019-03-15 22:16:25 · 2566 阅读 · 0 评论 -
Redis设计分布式锁
通过Redis高版本的原子命令jedis.set(lockName, "", "NX", "PX", expireTime);代码分析redis的set命令可以携带复杂参数,第一个是锁的key,第二个是value,可以存放获取锁的客户端ID,通过这个校验是否当前客户端获取到了锁,第三个参数取值NX/XX,第四个参数 EX|PX,第五个就是时间NX:如果不存在就设置这个key XX:如果存...转载 2019-03-15 22:12:35 · 375 阅读 · 0 评论 -
使用Redis做过异步队列吗,是如何实现的?
Redis设计用来做缓存的,但是由于它自身的某种特性使得它可以用来做消息队列。它有几个阻塞式的API可以使用,正是这些阻塞式的API让其有能力做消息队列;另外,做消息队列的其他特性例如FIFO(先入先出)也很容易实现,只需要一个list对象从头取数据,从尾部塞数据即可;Redis能做消息队列还得益于其list对象blpop brpop接口以及Pub/Sub(发布/订阅)的某些接口,它们都是阻...转载 2019-03-12 17:14:58 · 2283 阅读 · 1 评论 -
Redis查找所有key的两种方法
keys指令优点:速度快缺点:会阻塞进程,导致线上服务卡顿,不可用scan指令优点:不会影响线上服务缺点:key变更可能导致数据不准确转载 2019-03-12 17:13:32 · 15497 阅读 · 1 评论 -
Redis常见的性能问题和解决方案?
Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最好不要写内存快照。Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启的恢复速度。Master调用BGREWRITEAOF重写AOF文件,AOF在...转载 2019-03-12 17:11:39 · 1029 阅读 · 0 评论 -
缓存与数据库不一致怎么办?
一、数据库主从不一致先回顾下,无缓存时,数据库主从不一致问题。如上图,发生的场景是,写后立刻读:主库一个写请求(主从没同步完成)从库接着一个读请求,读到了旧数据最后,主从同步完成导致的结果是:主动同步完成之前,会读取到旧数据。可以看到,主从不一致的影响时间很短,在主从同步完成后,就会读到新数据。二、缓存与数据库不一致再看,引入缓存后,缓存和数据库不一致问题。如上图,发生的...转载 2019-03-12 17:07:16 · 625 阅读 · 0 评论 -
Redis过期策略都有哪些
Redis的过期策略就是指当Redis中缓存的key过期了,Redis如何处理。定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内...转载 2019-03-12 17:02:15 · 709 阅读 · 0 评论 -
Redis的数据淘汰策略有哪些?
Redis的内存淘汰策略是指在Redis的用于缓存的内存不足时,怎么处理需要新写入且需要申请额外空间的数据。Redis 提供 6 种数据淘汰策略(即,内存淘汰策略)volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用 的数据淘汰volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要...转载 2019-03-12 17:00:30 · 1724 阅读 · 0 评论 -
缓存穿透、缓存雪崩、缓存击穿解决方案?
缓存穿透含义:缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。解决方案:有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的...转载 2019-03-12 15:45:59 · 204 阅读 · 0 评论 -
Redis当中有哪些数据结构?
String(字符串)介绍:string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象;string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。命令:set 和 get用法:redis 127.0.0.1:6379&gt; SET name “runoob"OKredis 127....转载 2019-03-12 15:28:48 · 538 阅读 · 0 评论 -
Java时间转化指定格式
背景在做Java时间转化的时候,想获取时分秒,出现了一个bug,于是,对这了仔细研究下。有BUG的写法我获取时间的写法是这样的:public static String getDatehhMMss(Date date){ DateFormat dateFormat = new SimpleDateFormat("hhMMss");//错误写法 //DateFormat da...原创 2019-01-04 14:38:48 · 759 阅读 · 0 评论 -
Java虚拟机相关知识
JVM这篇笔记主要列举一下JVM(Java Virtual Machine)必须知道的一些知识点,参考周志明《深入理解Java虚拟机》。JVM内存区域参考《深入理解Java虚拟机》第2章,第2.2节 程序计数器1.每个线程都有自己独立的程序计数器2.线程执行的是非native方法,则程序计数器中保存的是当前需要执行的指令的地址;执行na...原创 2019-01-02 23:16:06 · 227 阅读 · 0 评论 -
Java正确关闭多个文件流
用Java操作文件时,难免会构造多个文件流,那么怎样合理的关闭多个流呢?其实只需要关闭最后打开的一个流就行了。参考:http://www.javapractices.com/topic/TopicAction.do?Id=8...转载 2018-10-25 14:52:46 · 4403 阅读 · 0 评论 -
java远程Debug Jar包
在java -jar xxx.jar时,加上debug参数,这样idea或者eclipse就可以通过remote远程调试来debug了。 参考:http://blog.csdn.net/rainbow702/article/details/64127489转载 2017-12-20 01:45:06 · 4827 阅读 · 2 评论 -
Java NIO 入门
IBM开发者社区发表的Java NIO 入门资料:https://www.ibm.com/developerworks/cn/education/java/j-nio/j-nio.htmlNIO与传统IO的区别相同点:都是负责输入输出的;区别:效率高低上,NIO比IO要快很多。NIO为什么比IO快IO是以流一次一个字节的处理数据,一个输入流产生一个字节的数据,一个输出流消费一个字节的数据。原创 2017-09-22 23:25:13 · 350 阅读 · 0 评论 -
Java异常堆栈的查看方法
概述相信很多初学者都很怕eclipse下满篇通红的异常信息,其实这些异常信息是定位代码问题最好的方法。这篇文章主要记录下我遇到异常堆栈信息时的思路。JavaSe中没有用专门Log类捕获的异常如下代码所示:public class TestException { public static void main(String[] args) { new TestException(原创 2017-08-15 00:40:29 · 10371 阅读 · 0 评论 -
Java动态代理
什么是代理模式代理模式(英语:Proxy Pattern)是程序设计中的一种设计模式。 所谓的代理者是指一个类别可以作为其它东西的接口。代理者可以作任何东西的接口:网络连接、内存中的大对象、文件或其它昂贵或无法复制的资源。什么是Java动态代理《Java编程思想(第四版)》上这样介绍Java的动态代理: Java的动态代理比代理的思想更向前迈进了一步,因为它可以动态的创建代理并动态的处理对所代原创 2017-07-06 00:46:31 · 454 阅读 · 0 评论 -
Java常量池简单认识
常量池的定义常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括字符串常量,如String s = “java”这种申明方式;当然也可扩充,执行器产生的常量也会放入常量池,故认为常量池是JVM的一块特殊的内存空间。 Java中的常量池,实际上分为两种形态:静态常量池和运行时常量池。所谓静态常量池,即*.class文件中的常量池,原创 2017-06-30 00:16:21 · 381 阅读 · 0 评论 -
Java对象的线程状态
概述在工作中,看到在一个单例模式的对象中,有获取线程中断状态的操作,然而这个对象又被多个线程访问,于是对同一个对象调用Thread.currentThread().interrupt()当前线程状态产生了好奇。测试代码两个单例模式的对象均被两个线程调用单例对象A的代码public class SingleAAAObj { //创建 SingleObject 的一个对象 priva原创 2017-06-29 00:35:01 · 408 阅读 · 0 评论 -
Java反射获取get和set方法
反射bean的get方法 /** * java反射bean的get方法 * * @param objectClass * @param fieldName * @return */ @SuppressWarnings("unchecked") public static Method getGetMethod(Clas转载 2017-03-08 23:50:15 · 27713 阅读 · 4 评论 -
Java实现QQ窗口自动输入
直接上代码TestInput 实现了一个输入的操作import java.awt.Robot;import java.awt.Toolkit;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.StringSelection;import java.awt.datatransfer.Transferable;原创 2016-10-16 11:38:31 · 11806 阅读 · 14 评论 -
Java集合排序
写点示范代码演示集合排序1,List集合排序,按照自然排序可以调用JDK的工具Collections.sort()方法;import java.util.ArrayList;import java.util.Collections;import java.util.List;public class SortString { public static void main(String原创 2016-09-21 11:52:39 · 879 阅读 · 1 评论