java
文章平均质量分 77
guduyishuai
这个作者很懒,什么都没留下…
展开
-
java8初体验——optional、lambda、stream、map
原创文章,转载请注明 刚用java8不久,很多东西了解的还不很深刻,但是感觉是相当的惊艳。很肤浅的做一个初体验心得吧。 java8的很多东西使得可读性变强了,通过方法的调用替代了很多if,for循环,使得语意一目了然,而且节省了编码工作。 有了optional,再也不用if(xx!=null)的判断了。特别是optional和lambda,st原创 2017-02-27 21:14:38 · 4804 阅读 · 0 评论 -
java+selenium
之前用过selenium的python模块,其实selenium也有java的api 常用功能实现总结 获得浏览器的驱动,比如ie浏览器 public class SeleniumConfig { private static WebDriver driver; static { System.setProp原创 2017-09-30 16:54:22 · 1276 阅读 · 0 评论 -
java+python
java中执行python脚本文件 主要是通过Runtime执行python命令,举例如下:public class PythonUtil { private final static String PYTHON_PATH = "python"; public static String getUrl(String name) { String classpat原创 2017-09-30 17:02:48 · 374 阅读 · 0 评论 -
python 键盘输入总结
不需要句柄的方式,需要pywin32模块,底层为C++的keybd_event,工具实现如下VK_CODE = {'backspace':0x08, 'tab':0x09, 'clear':0x0C, 'enter':0x0D, 'shift':0x10, 'ctrl':0x11,原创 2017-09-30 17:38:20 · 1114 阅读 · 0 评论 -
ocr总结
工作关系,这一周对ocr进行了一下研究。这里进行一下总结 目前主流的技术有:1、tesseract-ocr 2、sikulix(其底层是tesseract-ocr,只是他的封装用起来很方便) 3、百度-ocr原创 2017-10-27 09:11:24 · 5198 阅读 · 0 评论 -
lua+redis业务场景举例——队列中的应用
lua脚本可以实现redis命令的原子性,也就是在脚本中的redis命令不会插入其他redis命令。和pipline、redis事务相似。需要注意的是,它并不会保证同时成功或者同时失败。当然,解决办法除了lua脚本外,还可以用分布式锁,分布式锁可以用setnx(需要注意集群中的时间统一问题),redission以及zookeeper。 这个业务场景非常的多,比如抢红包中的判断重复等原创 2017-10-27 09:27:30 · 1250 阅读 · 0 评论 -
分布式锁的应用
之前说到redis队列的场景使用lua脚本可以解决高并发的原子性问题,但是redis集群并不支持lua脚本,因此想要实现原子性防止高并发的问题就需要使用分布式锁。 这里总结两种分布式锁的实现,使用Redisson和Zookeeper。一、场景回顾先回顾一下场景,我们假设两个线程分别为不同jvm上的两个程序,一个服务在入队,一个服务在出队,看看判断入队的逻辑是否可靠pu原创 2017-11-03 11:46:46 · 359 阅读 · 0 评论 -
java8——使用lambda和枚举实现简洁、可读性良好的策略模式
java8的函数式编程使得代码非常简洁,而且可读性良好,很有写脚本的感觉。写多了用回低版本的java都感觉不太适应。这里举一个使用函数式接口和枚举实现策略模式的例子public class Test { private Operate operate; @org.junit.Test public void test() { setOperate(OperateImpl.AD原创 2017-11-03 13:27:01 · 3609 阅读 · 1 评论 -
spring-boot+spring-retry
废话不多说,直接上干货一、maven org.springframework.boot spring-boot-starter-aop org.springframework.retry spring-retry 二、接口的方法如果需要retry的方法为接口的方法,那需要加入如下配置原创 2017-11-25 14:59:41 · 662 阅读 · 0 评论 -
spring-boot 性能监控
废话不多说,直接上干货一、actuatorspring-boot自带性能监控,需要引入依赖包如下 org.springframework.boot spring-boot-starter-actuator 二、自定义Endpoint继承AbstractEndpoint类,实现invoke方法,返回需要展示的性能信原创 2017-11-25 15:19:59 · 7947 阅读 · 0 评论 -
Gradle非常灵活——借助Groovy实现自定义逻辑或者调用Gitlab api
前言Gradle既然作为替代Maven的工具,自然有相对于Maven的优点。相信Gradle的灵活性是它相对Maven的一个很大的优点。然而Gradle之所以灵活,是因为它可以很方便的用Groovy实现自己的逻辑。本篇文章简单的说一说Gradle如何借助Groovy实现一些简单的自定义逻辑。【同时也更新到了头条上https://www.toutiao.com/i6642260062624547...原创 2019-01-03 21:27:18 · 1471 阅读 · 0 评论 -
sikulix-java
sikulix是一个很酷的东西,是由麻省理工大学开源的一种脚本。他同时也提供了python,js,java三种脚本的api。有了它,可以不用python的pywin32和selenium了。并且能对qt进行操作,对于selenium也不用浏览器的对应驱动,不用调用打开浏览器的函数。对于android也可以直接结合一个控机软件映射到window上进行脚本控制。环境搭建sikulix的jar需原创 2017-09-30 10:09:01 · 2363 阅读 · 0 评论 -
引入swagger(2)——与spring-boot整合
第一篇文章介绍了与传统的spring整合,这里介绍如何与spring-boot整合。我们可以发现spring-boot简化了相当多的配置 pom io.springfox springfox-swagger2 2.2.2 io.springfox springfox-swagger-ui 2.2.2原创 2017-09-16 11:41:25 · 1860 阅读 · 0 评论 -
多线程——worker-master模式
该模式通过将任务拆分,多个worker线程共同处理任务,最终返回结果给master,由master组装最终结果。 一、master 需要保存的数据 1、任务队列,需要注意线程安全,保存需要处理的数据 2、worker线程队列 3、子任务处理结果集,需要注意线程安全 构造器 需要原创 2017-08-24 20:43:55 · 755 阅读 · 0 评论 -
基于软引用的单例缓存
原创文章,转载请注明 把软引用和单例结合,实现一个简单的缓存。 1、软引用 软引用对于缓存的实现是非常适用的。软引用在内存存在压力的时候会强制进行卸载,销毁对象。 2、单例 单例实现的方式有很多,目前最流行的方式是懒汉模式。 这里通过静态内部类实现原创 2017-03-03 15:58:22 · 731 阅读 · 0 评论 -
获得方法参数名的多种方法以及javassit的bug
今天碰到一个奇怪的现象,自己机子上单元测试没问题的一个接口,一放到服务器上参数就传不上去。经过排查,问题定位到获取方法参数名上。逻辑是这样的,通过方法中的参数名去解析json中相应的值,然后通过反射调用业务逻辑层。然而通过javassit获取方法的参数名非常不稳定,字节码解析经常解析出错。接下来详细谈谈如何获得方法参数名以及javassit的这个bug的具体表现。 字节码与编译器原创 2017-03-30 00:15:06 · 1847 阅读 · 0 评论 -
事务的那些坑
总结一下事务在使用过程中的一些坑。 在介绍之前,先普及一些基础知识 一、基础知识 事务隔离等级 一般事务的隔离等级有Read uncommitted,Read committed,Repeatable read,Serializable。其中隔离程度越来越严格,到了Serializab原创 2017-03-30 16:14:15 · 3397 阅读 · 1 评论 -
fastjson扩展——多态支持
fastjson在从json字符串解析成对象的时候是不支持多态的。 什么意思呢?就是说我调用JSON.parseObject(jsonstr, XXX.class)方法的时候,如果XXX是一个抽象类,或者接口,我是没有办法根据json字符串中提供的实现类信息解析成相应的实现类的。这样调用后的结果是null。 如何做到对多态的支持呢?我原创 2017-04-01 22:13:43 · 10680 阅读 · 4 评论 -
myeclipse2016的bug——对Lambda表达式支持的缺陷
不多说,上两张图大家就明白了 ch本来是内部类的一个实例,在多层嵌套后,作为参数传递到方法不能被myeclipse所识别原创 2017-04-18 10:52:41 · 2029 阅读 · 0 评论 -
C++对比java
java毕竟是在C++的基础上实现的,对比一下它们还是很有趣的。。 接口 C++中没有接口的概念,但是接口中未实现的方法对应到C++中其实就是纯虚函数。 堆和栈 java的堆和栈的规则是这样的。基本型的对象和引用(think in java 中称为句柄)存在栈中,其它的对象(new)存在堆中。 C++原创 2017-04-18 11:18:33 · 583 阅读 · 0 评论 -
spring-boot整合redis作为缓存(2)——spring-boot的缓存
分几篇文章总结spring-boot与Redis的整合 1、redis的安装 2、redis的设置 3、spring-boot的缓存 4、自定义key 5、spring-boot引入redis spring-boot对缓存的支持非常不错,少量的配置即可完成。原创 2017-04-14 17:10:13 · 2099 阅读 · 0 评论 -
spring-boot整合redis作为缓存(3)——自定义key
分几篇文章总结spring-boot与Redis的整合 1、redis的安装 2、redis的设置 3、spring-boot的缓存 4、自定义key 5、spring-boot引入Redis 在上一篇文章中说道key是用来分辨同一个缓存中的缓存数据的。key是可以自己制定的原创 2017-04-14 17:28:28 · 10110 阅读 · 0 评论 -
spring-boot整合redis作为缓存(4)——spring-boot引入Redis
分几篇文章总结spring-boot与Redis的整合 1、redis的安装 2、redis的设置 3、spring-boot的缓存 4、自定义key 5、spring-boot引入Redis 依赖 需要添加的依赖如下 org.springf原创 2017-04-14 22:32:13 · 3251 阅读 · 0 评论 -
集群与负载均衡系列——nginx ip_hash或redis实现共享session(2)
上一篇文章介绍了利用nginx进行集群与负载均衡。今天来说说如何共享session。 ip_hash 顾名思义,根据客户端ip,计算hash值并映射到相应服务器。那么同一个用户就始终申请同一个服务器上的服务,这样的话就保证了用户信息始终一致。 当然了,既然是hash,自然免不了hash冲突,而且服务器少的时候hash冲突肯定非常严重原创 2017-04-27 23:35:06 · 3251 阅读 · 0 评论 -
架构师必须掌握的知识——spring容器扩展点
架构师必须掌握的知识——spring容器扩展点写作意图spring作为目前最为主流的框架,能掌握它的各个知识点是必不可少的技能,有些知识在业务代码中不经常使用,但在框架开发时会经常用到。这篇文章的知识就是如此,希望这篇文章能起到夯实基础的作用。本人能力有限,理解不当的地方在所难免,希望各位看官指正。文章阅读建议文章遵循带着问题阅读的方式,这样能深刻掌握知识。文章会先抛出要解决的问题,引导思...原创 2019-01-01 13:39:54 · 622 阅读 · 0 评论