项目异常问题解决

项目异常问题解决这天 程序抛出了一个WARN日志: createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [43,844] milliseconds. 这意味着SHA1PRNG算法导致项目启动多花费了43秒,这是基于SHA-1算法实现且保密性较强的伪随机数生成器 1.从tomcat层面上解决: 在catalina.sh中加入这么一行:-Djava.security.egd=file:/dev/./urandom 2.从java层面解决 打开$JAVA_PATH/jre/lib/security/java.security这个文件,将下面的内容:
项目异常问题解决2019-02-28鱼鱼

JVM源码解析(2) ContextClassLoader与ClassUtil.forName()方法浅析

JVM源码解析(2) ContextClassLoader与ClassUtil.forName()方法浅析在Spring获取Context的源代码中,我们看到了对ClassUtil的方法调用,通过给定ClassName和ClassLoader进行Class的加载: ClassUtil.forName是仅供于Spring内部使用的获取Class对象的方法,来看一下源码: 首先 对于缓存的Class一块,在类的静态块中就能看出其逻辑: 在上面的resolvePrimitiveClassName方法中,先对长度做了一个判断,因为较长的packagename会影响执行的性能: 最终加载Class依旧是通过ClassLoader的,先来看一下获取ClassLoader的方法实现: 此处优先使用了ContextClassLoader作为 类加载器而非默认的AppClassLoader,在JVM源码解析 从 Launcher类浅谈ClassLoader中,提到了关于 类加载器的相关知识,使用ContextClassLoader是为了弥补双亲委派加载机制的对于自定义 类加载器的缺憾:那些自定义的 类加载器并没有机会上场,在使用了AppClassLoader后我们的自定义ClassLoader所加载的Class是无法被加载进去的,使用ContextClassLoader,我们可以在定义线程时,通过Thread的init方法(子线程调用,私有方法)或是setContextClassLoader直接指定使用自定义的ClassLoader
JVM源码解析(2) ContextClassLoader与ClassUtil.forName()方法浅析2020-08-16鱼鱼

Netty

NettyNIO相比IO有诸多利处,但平常开发中若是直接使用原生NIO进行业务开发是很不可取的,否则将面临臃肿而晦涩难懂的代码 所以日常开发中我们会时常使用封装了NIO操作代码的Netty来实现NIO操作 Netty是一个异步事件驱动的网络应用框架,用于快速开发可维护的高性能服务器和客户端
Netty2019-05-11鱼鱼

Redis原理-源码解析:数据结构2 list

Redis原理-源码解析:数据结构2 list所有原理实现基于Redis版本6.0.9 Redis中的list采用的是链表,在开始前,我们先看看list的最基本指令实现 t-list.c 由此可知,Redis的List底层数据结构都是基于quickList的 这是list所依赖的数据结构: quicklist.h 我们注意到其是由quicklistNode所构成的链表,而其中的数据实则为zl(ziplist)或是bookmark,在大多时候quicklistNode都使用ziplist存储数据 在上文中lpush执行了一个插入方法quicklistPush,在quicklist.c中有他的实现: quicklist真正存储数据的结构是ziplist,所以倒不如说,在Redis中,list是一个由ziplist节点构成的链表
Redis原理-源码解析:数据结构2 list2020-11-28鱼鱼

DDD领域下的架构模式——CQRS架构

DDD领域下的架构模式——CQRS架构//TODO
DDD领域下的架构模式——CQRS架构2021-06-24鱼鱼

代理与nginx

代理与nginx代理指接受请求但是不由代理服务器自己处理请求而是直接转发给指定服务器(或是根据负载均衡算法转发给集群部署中的某一台服务器),然后由代理服务器接收请求结果并返回给客户端 指客户端的代理处理方式,指用户通过代理服务器访问指定的网站、服务,最常见的应用是翻墙,并且使用这种方式可以使客户端匿名访问 指服务端的代理处理方式,多个用户在访问网站服务时,实际访问的是反向代理服务器(如nginx),反向代理服务器将请求内容转发给服务集群,最常用于服务器集群负载均衡和避免内网信息暴露 总之,正向代理是对服务端隐藏了客户端信息,反向代理则正相反,有一张图可以很好地概括这两个代理概念(图源知乎,侵删)
代理与nginx2019-05-11鱼鱼

多线程应用提高(II) 线程池

多线程应用提高(II) 线程池项目中,当发生并行操作时,一般都会用到线程池处理多线程任务,线程池的规则类似于数据库连接池,在此不予赘述 jdk自带线程池,此处主要讲述Spring框架自带的线程池ThreadPoolTaskExecutor 通过实现Runnable和Callable接口实现一个线程任务,从而能放入Executor进行线程管理 其中,Callable可以理解为带有返回值的Runnable,并且Callable需要实现的方法不是run()而是call(),该方法返回一个泛型对象 当我们把一个需要返回值的线程任务放进线程池后,线程池会返回一个Future对象,借助该对象,我们可以调用get()方法获取线程的状态,调用get()会阻塞当前线程直到返回结果
多线程应用提高(II) 线程池2020-02-25鱼鱼

网络协议面面观:TCP/IP协议组,TCP与UDP

网络协议面面观:TCP/IP协议组,TCP与UDP日常中的网站应用交互绝大部分都是基于TCP/IP协议栈构建的,而TCP/IP就是通信常见的protocol(协议)组,是一类协议的简称,利用这篇文章总结一些常见的TCP/IP网络协议簇以及着重一下两个常见的传输层协议TCP和UDP,扫一下盲 OSI参考模型是ISO(国际标准化组织)指定的网络互联七层模型,与此对比的还有互联网界针对TCP/IP协议簇提出的四层模型 相比之下,OSI七层模型的应用面很窄,且是一种理论模型,TCP/IP则是一种实施标准 一般使用四层模型来表达协议归属,所以此处不详细介绍七层模型的内容,只是简单的与四层协议做对比,两者对比: 应用层 通过这个TCP/IP模型,整体的数据流向是发送方自顶向下然后在接收方自底向上的,即:
网络协议面面观:TCP/IP协议组,TCP与UDP2020-03-03鱼鱼

ES快速入门(2)——Tokenizer、Reindex

ES快速入门(2)——Tokenizer、Reindex本篇介绍es提供的几种分词分析器和常用的开源分词分析器 es默认的分词器,中规中矩的按照 Unicode Standard Annex #29分词,一般的小写符号会忽略,对于中文等字符会逐字分割,参数max_token_length表示最大的字符长度,再切分后会继续按此切分 譬如: 会分词为: 一个无视语义,按照字符尽量收集全索引的分词方式,会前后叠加的按符号位分词,参数: 会分词为: nGram的分词很全面,但如此夸张的方式用不好会导致索引doc过大,同时使查询效率偏低 分词规则很简单,无其余规则的按空格分词: 会分词为: 在standard的基础上能够有效拆分出邮箱和url地址的格式,同样有max_token_length这一参数:
ES快速入门(2)——Tokenizer、Reindex2020-09-05鱼鱼

多线程应用提高(I) 多线程常见问题、常用方法和关键字

多线程应用提高(I) 多线程常见问题、常用方法和关键字我们一般熟识的创建多线程方式即为继承Thread类或是实现Runnable接口,重写run()方法,还有创建线程池实现 手动定义一个线程任务(作为内部类)的方法现在已经不被提倡,所以遇到可能存在并发的复杂任务时,一般采用线程池来实现 一些设计并发常用并且容易被混淆的方法们: static sleep() : Thread类的静态方法,阻塞当前正在线程,不释放锁; wait() : 当前线程暂停,并释放锁且暂时无法重新获得锁,必须绑定当前对象内容锁(如使用Synchronized的同步块),知道其他线程调用notify()/notifyAll()才有机会获得锁继续执行; yield() : 当前线程暂停,此时时间片分配给其他线程,但是不会分配给优先级更低的线程;
多线程应用提高(I) 多线程常见问题、常用方法和关键字2019-12-07鱼鱼

Java中的数据结构

Java中的数据结构若不提到Jdk版本,本文中的源码都是基于jdk8版本分析的 注:有关同步集合(如Vector、ConcurrentHashMap、CopyOnWriteArrayList等)请移步博客 数组集合类,是Collection接口的子类,有序的Collection实现,包含ArrayList、LinkedList、Vector,其中Vector是线程安全的ArrayList,LinkedList是底层基于双向链表实现的List ArrayList的默认大小为10,扩容操作: 也就是1.5倍 不重复集合类,不能包含重复的元素,是Collection接口的子类,包含HashSet、LinkedHashSet、TreeSet,其实都是基于Map类的实现,所以详细了解请参阅Map类
Java中的数据结构2019-07-12鱼鱼

安全框架的使用:Shiro

安全框架的使用:ShiroShiro与Sping Security均是java的安全框架,主要用于处理用户身份验证和授权 常见场景为用户系统登录 Shiro易用性强,提供了认证,授权,加密,和会话管理功能 Shiro的三大核心组件 : Subject:即当前用户概念,不止代表着某用户,也可以是进程或任何可能的事物 SecurityManager:即所有Subject的管理者,可以把他看做是一个Shiro框架的全局管理组件,用于调度各种Shiro框架的服务 作用类似于SpringMVC中的DispatcherServlet,用于拦截所有请求并进行处理 Realm:Realm是用户的信息认证器和用户的权限认证器,我们需要自己来实现Realm来自定义的管理我们自己系统内部的权限规则
安全框架的使用:Shiro2019-09-29鱼鱼
网站地图
1
首页 博客 {{screen}} 第 {{page}} 页
博客索引
{{blog.createDate}} ◔ {{blog.timeline}} 小头像 {{blog.author}} {{tag}}
{{blog.likeCount}}{{blog.commentCount}}
分类下暂时没有文章哦!
主题分类
{{taggroup.label}} 

{{tag.value}}