JDK

RSA 算法工具类(纯JDK,无引入jar)

可紊 提交于 2020-08-18 06:59:46
下面是RSA 生成公私钥 加解密 加签验签的功能类 开放平台签名算法名称 标准签名算法名称 备注 RSA2 SHA256WithRSA 强制要求 RSA 密钥的长度至少为 2048 RSA SHA1WithRSA 对 RSA 密钥的长度不限制,推荐使用 2048 位以上 由于计算能力的飞速发展,从安全性角度考虑,尽可能考虑RSA2,该算法在摘要算法上比 SHA1WithRSA 有更强的安全能力。 目前 SHA1WithRSA 的签名算法很多地方也提供支持,但为了您的应用安全,强烈建议使用 SHA256WithRSA 的签名算法。 keySize长度推荐 2048位 工具类 使用的 全部是 jdk自带jar 不需要引入其他包,附带基础测试,工具类使用的是RSA2 keysize 默认 2048,标准算法名称为 SHA256WithRSA package utils; import javax.crypto.Cipher; import java.security.*; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security

CentOS 7 安装 Jenkins

夙愿已清 提交于 2020-08-18 06:56:46
CentOS 7 安装 Jenkins 准备工作 安装 jdk8 yum localinstall jdk-8u211-linux-x64.rpm vim /etc/profile 添加到java_home 到末尾 export JAVA_HOME=/usr/java/jdk1.8.0_211-amd64 export PATH=$JAVA_HOME/bin:$PATH 如果你的系统没有自带git,那么也需要安装一个 yum install git 1.安装 直接下载 rpm 安装 各个版本地址 https://pkg.jenkins.io/ wget https://pkg.jenkins.io/redhat/jenkins-2.156-1.1.noarch.rpm yum localinstall jenkins-2.156-1.1.noarch.rpm 2.配置 vim /etc/sysconfig/jenkins # 监听端口 JENKINS_PORT="8080" 3启动 systemctl start jenkins 初次登陆的密码 cat /var/lib/jenkins/secrets/initialAdminPassword 来源: oschina 链接: https://my.oschina.net/u/4072296/blog/4308671

我的JVM(六):GC的基础概念以及GC算法

青春壹個敷衍的年華 提交于 2020-08-18 05:45:59
一、概述 垃圾收集Garbage Collection通常被称为GC,但是GC一般也指Garbage Collecting(垃圾回收这个动作)或Garbage Collector(垃圾回收器),这些都是是JVM知识体系中非常重要的知识,也是程序员必须要掌握的技能,本文将详细讲述Java垃圾回收的概念机制以及核心算法。 二、分析 1. 什么是垃圾 我们所说的垃圾是指没有任何引用的一个对象或者多个对象(这多个对象相互引用,但是没有一个与主对象挂钩,也就是根可达算法(下文会讲)无法找到这其中任何一个对象)。 我们再来来熟悉两个概念: (1) 内存泄露:内存泄露是指有的内存地址太过碎片化而无法被利用,我们都知道一个对象创建的时候开辟的内存空间是连续的,所以太过碎片化的内存空间就没办法利用。内存泄露多了也会导致内存溢出。 (2) 内存溢出:内存溢出是指内存已经装满了,无法再装下更多的对象了。 C和C++都是需要开发者用代码手动回收内存的:C语言用free关键字来回收内存,C++用的是delete。但是手动回收内存容易出现两种类型问题:忘记回收(容易引发OOM内存泄露)和多次回收。 后来诞生的java、python等都是自带了垃圾回收器的语音,开发者只管创建对象,对象的销毁不需要手动处理,由专门的垃圾回收器进行回收。 2. 如何定位垃圾 常见的方式有两种: (1) 引用计数(Reference

HashMap 源码分析

荒凉一梦 提交于 2020-08-18 05:40:32
  --翻开 HashMap 的源码,首先看到的就是 Doug Lea 大爷的大名。每当看到这个名字,就像看到小胡子大爷和蔼的对我们说“少年,你渴望力量吗”。   这次不以面试背题为目的,挑几个源码实现中值得玩味的点来学习一下。   首先看几个初始化参数,在实现中 Lea 大爷大量的使用了二进制位移运算。比如 16 表示为 1<<4 ,1 073 741 824 表示为 1<<30 。由于计算机的物理特性,二进制运算的效率尤其是位移运算是高于直接使用十进制运算的。在非官方统计中,位运算比取余运算可以节约大约四十余个 CPU 晶振周期,按照Bruce Eckel给出的数据,性能大约可以提升5~8倍。在日常 CURD 的过程中,也可以在写好注释的前提下尽量的使用二进制位运算替代十进制运算。 负载因子(LOAD_FACTOR)   初始容量为 16,负载因子为 0.75。这是从 HashMap 诞生开始就没变过的定义,当元素数量达到当前容量的 75% 时,HashMap 会对数组进行扩容。该因子可在创建实例时指定。   由于哈希值在计算时需要映射到长度为 capacity 的数组下标上,因此哈希值的计算必然包含对数组长度的取模(取模的点后面说),在 put 方法中可以找到计算数组下标时需要对数组长度取模:   因此数组的剩余空间越小,数组下标冲突的几率越大,元素不得不存储在链表中

字节码动态注入 2(javassist)

北城余情 提交于 2020-08-18 05:36:22
请看完文章再抄。~~~~~~~~~~~~~~·· 在Android开发中,我们经常通过Gradle Plugin配合Android Gradle Plugin提供的Tranform API,并应用Javassit字节码编辑库在Android打包过程中做一些特殊操作。例如:自动埋点,热修复等。 Javassit提供了一个方便获取ClassPool的方法,ClassPool.getDefault(),它是个单列对象。 当你在使用assemble命令打包你的Android应用时,默认会执行assembleDebug和assembleRelease,如果你增加了定义的buildTypes或者flavors,所有的assembleXXX命令都会执行。因此assemble多次调用void transform(TransformInvocation transformInvocation)方法。 此时,如果你是使用ClassPool.getDefault()来存放你需要操作的Class,并且在自定义Transform中对CtClass应用writeFile(),toClass()或者toByteCode()方法将其转换成Class文件,那么Javassist就会冻结(frozen)这个CtClass对象,之后就不能修改这个CtClass对象了。所以transform方法第二次执行时

java项目上线过程

我的梦境 提交于 2020-08-18 04:42:47
关于如何将 Java web上线,部署到公网,让全世界的人都可以访问的问题。小编将作出系列化,完整的流程介绍。 1.在myeclipse中开发好项目,打包成war格式,不会的同学参考以下 http://zhidao.baidu.com/link?url=Gb0OV9pHiDtJr8nyjPrnSA65g49I4TEAn2N3pwXsxzVsCaX0gJ8RQZHQ2GmDrmdM0ltoBdCPYEtT1iSawcedcK 2.购买云服务器,建议去阿里云购买(ecs),教程如下 http://jingyan.baidu.com/article/4e5b3e195ae68a91901e2402.html 以上教程的最后一步远程连接不用看,下面再说远程连接的事,只需买到一个阿里云服务器就行了 注:解释一下什么是云服务器。就是另一台电脑,该电脑永不关机,永不断网。 3.登录你的阿里云服务器,以下是教程 购买 Linux 系统的阿里云服务器:http://jingyan.baidu.com/article/84b4f565f3d99260f7da3271.html 购买windows(win2012为例)的阿里云服务器:http://www.imaoye.com/article/aliyunECS.html(该教程说的是远程连接的问题,但是登录包含在内,可不理会前两个图) 4.远程连接

面试准备季——MyBatis 面试专题(含答案)

穿精又带淫゛_ 提交于 2020-08-18 03:44:30
写在前面:2020年面试必备的Java后端进阶面试题总结了一份复习指南在Github上,内容详细,图文并茂,有需要学习的朋友可以Star一下! GitHub地址: https://github.com/abel-max/Java-Study-Note/tree/master 1、什么是 Mybatis? (1)Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程。程序员直接编写原生态 sql,可以严格控制 sql 执行性能,灵活度高。 (2)MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO 映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 (3)通过 xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过java 对象和 statement 中 sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。(从执行 sql 到返回 result 的过程)。 2、Mybaits 的优点: (1)基于 SQL 语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL 写在

JAVA DNS缓存原理

♀尐吖头ヾ 提交于 2020-08-18 00:29:45
一、DNS简介 日常上网大家一般都是使用域名,比如www.baidu.com。当你在浏览器输入了www.baidu.com的时候,就是用到了DNS技术。将域名解析为ip地址。 域名是分等级的,分为:根域名、顶级域名、次级域名、主机名。一般格式如下:主机名.次级域名.顶级域名.根域名。 二、JAVA中使用DNS 有两种方式: 使用InetAddress的getByName方法 InetAddress inetAddress = InetAddress.getByName("unKnownHost"); Socket ss = newSocket(inetAddress,123); 直接使用Socket封装好的(不推荐): Sockets = newSocket("unKnownHost",123); 三、JAVA对DNS的缓存 java获取host对应ip的过程如下(只关注查找ip的过程): 1.通过host先去本地缓存中获取,本地缓存分为addressCache(有效缓存)和negativeCache(无效缓存) 1.1如果addressCache中存在,则返回缓存的结果 1.2如果negativeCache中存在,则返回unknown_array,外层会抛出UnKnownHostException 1.3如果两个缓存均不存在,则返回null 2.如果缓存返回的为null

android双向认证(自签名证书) bks的生成方法

做~自己de王妃 提交于 2020-08-17 23:38:24
网上很多文章都是只能单向认证,特在此记录双向自签名证书。 windows电脑配置 BouncyCastleProvider 1. 下载 bcprov-ext-jdk15on-159.jar 2. 这个 jar文件放在 Java 主目录下的 jdk/jre/lib/ext目录下 3. 修改jdk/ jre/lib/security/java.security这个文件:在List of providers 注释的地方添加这一行 security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider 4. 重启终端,输入命令行: keytool -importkeystore -srckeystore client.p12 -srcstoretype pkcs12 -destkeystore client.bks -deststoretype bks -provider org.bouncycastle.jce.provider.BouncyCastleProvider 貌似要输入三次密码,记得问后台人员密码。 5.第4步中的client.p12是后台人员给的, 文章在这里 。 6. android代码中assets放入生成的client.bks和client.p12,网络框架使用基于okhttp的okgo框架

面试官怎么考察Java工程师?万变不离其宗的6点助你成功拿到Offer

夙愿已清 提交于 2020-08-17 21:08:28
面试小技巧 无论是毕业找工作,还是跳槽,面试都是必不可少的。对个人来说,跳槽是升职加薪和提升的机会,对公司来说,遇到一个满意的Java工程师也犹如炭中取栗。 面试官一般会怎么考察Java工程师呢?面试官询问的问题其实万变不离其宗,主要包含这6点。 一 工作经历 面试开始一般就是自我介绍,而自我介绍考察的内容主要有以下2点: 1、沟通表达能力 在团队和客户面前,能否清晰、准确、简洁的介绍自己和项目是非常重要的能力。 很多人在自己简历上写的天花乱坠,但是面试官仔细一问,就支支吾吾,把锅都甩在队友身上。这种做法很容易引起面试官的反感,失去工作机会。 2、业务理解能力 在面试过程中,能否用简洁的几句话介绍项目结构、业务模型和技术栈也是面试官比较在意的内容。 二 编码能力 在面试环节,面试官一般不会出很复杂的题,可能会让你手写一个算法,这个算法不会太难,一般在5分钟左右就可以完成。 在写出来之后要清楚的讲解思路,分析当前的算法空间、时间复杂度,是否可以优化,怎么优化。 三 Java基础 一般面试官都会从简单的Java基础开始问起,比如HashMap和HashTable有什么区别。很多面试者在简单的环节就被淘汰了。 除了JDK相关考察,JVM也是必不可少的问题,一般面试官会询问以下3个问题: 1、对JVM的理解 2、是否有JVM调优经验 3、是否遇到过GC问题,又是如何解决的 四 问题解决能力