- 博客(153)
- 资源 (1)
- 收藏
- 关注
原创 阿里云开放平台企业IT治理团队火热招聘
广而告之,欢迎转发!!!团队简介:用户对阿里云OpenAPI的每一次调用,都需要我们团队产品的深度参与,包括身份产品、认证产品、权限产品、审计产品、资源管理产品、网关产品、SDK产品、API生态等等。团队高速发展中,有意者知乎上私信我 @义臻阿里云开放平台-企业IT治理团队招聘研发JAVA、C++都要,根据面试情况定级P6,P7,P8等你来拿。...
2020-11-08 10:01:58 358
原创 云计算中的认证基础——AK
虽然AK还不为大家所熟知,但我敢百分百肯定,未来的几年里,AK在互联网业界的知名度绝对不会比AK47差,甚至会更强,会达到“无人不知,无人不晓”的程度。任何使用云计算的企业和个人,都必须首先经过AK的洗礼!什么是AK记得第一次和别人分享AK的时候,对方都先是一愣,然后调侃我怎么一个搞互联网的去搞军工了!这不是一个段子,也许你们脑海中想到的AK还是1974年11月7日在阅兵式上首次露面的这个...
2020-01-12 20:38:00 1135
原创 走进SAML——基础篇
SAML的全称是Security Assertion Markup Language。提到SAML,我们主要想到的是其在各种单点登录场景中大行其道。单点登录我们通常叫做SSO,那么SAML到底是如何实现SSO的呢?在这个系列的文章中,我将为大家阐释清楚。不过,水是有源的,树是有根的。一切的一切,还得从非对称密码学谈起!密码学新方向1976年,两个斯坦福大学的杰出学者,在经过了三年的合作之后......
2019-11-08 22:51:33 3211
原创 Mysql高性能索引的策略
Mysql的explain命令:explain命令显示了mysql如何使用索引来执行select查询语句,可以帮助写出更好的索引和更优化的查询语句。看示例如下:结果如下:explain列的解释:table:显示这一行的数据是关于哪张表的type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、index和all。显示index说明使用索引...
2016-08-11 14:17:26 676
原创 大型网站架构要素及常用手段
“一般来说,设计网站的架构。除了关注功能需求以外,还需要关注性能,可用性,伸缩性,扩展性,安全性。”性能:网站对并发请求的处理能力,有很多衡量指标,比如QPS,响应时间等。可用性:1-网站不能对外提供服务的概率,通常用几个9来衡量。伸缩性:网站能否通过添加硬件资源来提高处理能力。扩展性:网站能否在不改变原有架构的基础上添加新功能。安全性:你懂的。其中,伸缩性和扩展性经常被大家混淆。
2016-08-11 14:13:15 383
原创 Spring事务处理-ThreadLocal的使用
经历了几天的研究,终于是明白了ThreadLocal在Spring事务管理过程中发挥的用途。下面就以图文的形式和大家分享,如有错误,欢迎指正。大家都知道,Spring允许以声明的方式进行事务管理。通过声明的方式,程序员可以仅仅专注于业务代码,事务管理由Spring框架代为进行。以JDBC为例,正常的事务代码可能如下:dbc = new DataBaseConnection();//第1行...
2016-08-11 14:11:32 4563
原创 JVM-体系结构
大家都知道,java号称一次编译,处处运行。之所以能够这么强大,jvm功不可没。直接上图:笔者看过这张图很多次,一直没能理解。一直到最近,觉得能够明白到写博客了。一个java文件通过编译可以得到class文件,class文件就是java虚拟机能够执行的二进制文件。而程序在运行的时候,需要在内存中有数据空间。在jvm中,这个数据空间叫做运行时数据区。运行时数据区,一共有5类空间,分别是:方法区,
2016-08-11 14:09:49 408
原创 JAVA并发-内置锁和ThreadLocal
上一篇博客讲过,当多个线程访问共享的可变变量的时候,可以使用锁来进行线程同步。那么如果线程安全性存在的3个前提条件不同时存在的话,自然就不需要考虑线程安全性了。或者说如果我们能够将某个共享变量变为局部变量,那么自然线程安全性问题就不存在了。我们把“诸如将全局变量变为局部变量”这种将某个对象封闭在一个线程中的技术称为线程封闭,在《JAVA并发编程实践》中是这样说的,这么说有一定道理。但我还是想说说...
2016-08-11 14:08:48 1314
转载 关于linux的load的解释,很好的文章
http://blog.csdn.net/scugxl/article/details/77199403重点内容:对于N核心处理器,系统的全量load是N*1.00。例如:对于一个4核心的机器,它的load达到4.00时是全量运行的。所以一个正常的N核心的机器,它的load应该偶尔达到N或者大于N。多数时间应该小于N。这里面有个经验值为0.7。即load达到N的0.7倍时比较好。...
2018-02-12 15:57:36 459
原创 学习Java,我建议这样做
很多同学向我邀答,想要学习Java,却不知道该学什么,也不知道该学到什么深度?也有些外包的同学,想在技术上提升,却不知怎么做?本次 Live专为想学习和提高Java的人定制,给出了详细的学习路线,适合想要系统的专业的学习Java的人。尤其是:想要从事Java开发工作的大学生,想要转行当Java程序员的在职人员,想要提升Java水平却不知如何入手的小白等。30天从入门到精通? 那是宣传的...
2018-01-04 20:10:23 1086 2
原创 一个demo,让你的开发周期缩短一半
先上github地址点击打开链接由于现在java后端开发经常使用SSM框架,SpringMVC+Spring+MyBatis。因此作者维护了一个开源小demo,此demo中采用了JAVA项目常用的分层结构,从上到下依次是表现层(controller)业务层(service)数据访问层(dao)。另外,client包是需要暴露给第三方调用的接口所在的包,可以被独立的打包发布。common包是项目...
2017-07-26 20:07:39 2269 1
原创 序列化代理模式
我们知道,实现了序列化的类。在反序列化时,实例的创建是由readObject方法来完成的。由于这是一个不同于构造函数的创建类实例的通道,因此在构造函数中的状态约束条件在readObjetc中也得一条不落下的实现。这很让人头大,因此这里介绍一种模式,将实例的反序列化也交给改造函数来完成,即序列化代理模式。要想稳健的将带有重要约束条件的对象序列化时,这种模式可能是最容易的方法。代码如下:import ...
2017-05-18 14:21:41 739
转载 多网卡在同一网段内的问题
公司那个提供音乐下载的域名流量直逼1Gbps,但是系统的连接却不高,服务器用的是DELL2850的,板载两个Gbe的网口,还插了两块Intel的Gbe网卡,因此打算通过多网卡的负载均衡扩充一下系统的网络带宽。但是不想用多网卡的邦定,感觉那样不太灵活,因此决定采用Advanced Routing来解决这个问题。 查了一下 man ip,然后开始做了:1) 给四个网口配置了四个
2017-05-10 17:22:02 2079
转载 深入理解JAVA序列化
关于Java序列化的文章早已是汗牛充栋了,本文是对我个人过往学习,理解及应用Java序列化的一个总结。此文内容涉及Java序列化的基本原理,以及多种方法对序列化形式进行定制。 1. 什么是Java对象序列化Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中,就可能...
2017-05-05 15:51:59 340
原创 处理Callable线程内部的非受检异常
之前的博客中介绍过Runnable类线程的异常处理,数据JAVA多线程的童鞋应该知道。Java中处理Thread和Runnable线程体系之外,还用著名的Executor和Callable线程体系。而且,后者在实际中更为常见。那么在Runnable中奏效的UncaughtExceptionHandler机制在Callable中时候仍然有效呢?我们用代码来验证一下。 import j...
2017-04-22 18:42:28 3595 1
原创 UncaughtExceptionHandler—处理Runnable线程内的非受检异常
Java的异常非为受检异常和非受检异常。由于在多线程中,run()方法无法继续向上显式抛出异常。所以这就使得Thread线程中的异常处理变得棘手。首先对于受检异常,其应对办法非常通用:就是直接在run()方法体中捕获异常,然后进行对应的处理。对于非受检异常,JVM会帮助我们捕获到。那么我们如何处理JVM捕获的异常呢?答案是Thread.UncaughtExceptionHandler类。正如JDK文档所介绍的一样:“当一个线程由于发生了非受检异常而终止时,JVM会使用Thread.gerUncaugh
2017-04-21 10:54:13 5355 1
原创 变量的延迟初始化
在绝大多数的系统中,我们都会使用正常的初始化。正常的初始化代码是这样的:private final MyClass field = new MyCLass();但在有些程序中,我们不希望某些变量在正常的类加载过程中就被初始化。换言之,我们希望某些变量能够延迟初始化。在阅读下面的内容之前,笔者希望你能读一下我的另外一篇文章,单例模式的5种JAVA实现。你要问我为什么?答案只有四个字,“见多识广”!本...
2017-04-19 19:35:19 749
原创 线程安全性的文档化
首先说一个错误的观点是“只要是加了synchronized关键字的方法或者代码块就一定是线程安全的,而没有加这个关键字的代码就不是线程安全的”。这种观点认为“线程安全要么全有要么全无”,事实上这是错误的。因为线程安全包含了几种级别:不可变的(Immutable):类的实例不可变(不可变类),一定线程安全,如String、Long、BigInteger等。无条件的线程安全(Unconditi
2017-04-18 09:50:15 2453
原创 一个测试任务并发执行时间的方法
import java.util.concurrent.CountDownLatch;import java.util.concurrent.Executor;/** * Created by xuyizhen on 2017/4/16. */public class Util { /** * 测试任务task在指定的线程池execurtor中的并发度与性能的关系
2017-04-16 17:53:07 2415
转载 代码很烂,所以离职?
前一段时间一直在面试,有很多感悟,今天分享下其中的一个话题。我在面试的时候通常会问这么一个问题:你为什么离职?其中有不少同学会提到这么一个原因,现在的项目代码太烂了,前人留下了很多坑,我实在忍受不了了。其实在我看来,这个原因显得未免太不职业了,而且可能把工作想的太过于理想化了。如果因为代码很烂就离职,那么你跳槽到下一个公司依然会面对同样的现状,因为几乎每个人,都会觉得自己公
2017-04-07 21:51:55 518
转载 Java异常中的异常链机制
一.异常链常常会再捕获一个异常后跑出另外一个异常,并且希望把异常原始信息保存下来,这被称为异常链。 在JDK1.4以前,程序员必须自己编写代码来保存原始异常信息, 现在所有Throwable的子类子构造器中都可以接受一个cause对象作为参数,这个cause就异常原由,代表着原始异常,即使在当前位置创建并抛出行的异常,也可以通过这个cause追踪到异常最初发生的位置。 Throwable...
2017-04-01 17:18:55 5629 1
原创 Idea导出可执行jar包
1. 在菜单中选择File-》Project Structure,在出现的图中点击加号。并选择标号3的选项。2 按照上图选择后,出现下图,再按照红色标号进行选择。1位置选择Java应用程序的主类,2位置选择将项目中的jar包也导入到即将生成的jar包中,3位置一定要改成resources所在的路径,否则生成的jar包不可用。3 在上图中点击OK后会出现一个对话框,其中的内容不需要更改,直接点击确...
2017-03-31 21:51:15 3866 1
原创 HashMap和IdentifyHashMap
HashMap和IdentifyHashMap是Java中两个常见的Map类,对这两个类感兴趣的可以去看他们的源码。在这里只说他们的区别。 HashMap类判断键k1和k2相等的条件为 (k1==null?k2==null:k1.equals(k2))==trueIdentifyHashMap判断k1和k2相等的条件是(k1==k2) 来看下面的代码: import ...
2017-03-28 17:13:20 9819
原创 HTTP 请求头中的 X-Forwarded-For(XFF)
在Java代码实践中,有两种方式可以从HTTP请求中获得请求者的IP地址。一个是从Remote Address中获得,另一个是从X-Forward-For中获得,但他们的安全性和使用场景各有不同。一旦用错,就可能为系统造成漏洞。因此,需要开发者对这两个参数深入的理解。Remote Address代表的是当前HTTP请求的远程地址,即HTTP请求的源地址。HTTP协议在三次握手时使用的就是这个R...
2017-03-12 20:39:01 30763 1
原创 Spring代码中动态切换数据源
最近项目中遇到一个场景,需要能够在一个方法中操作多个具有相同表结构数据库(你可以理解为一个表中的数据被水平拆分到多个库中,查询时需要遍历这多个库)。经过笔者几天的研究,最终解决了问题,并且写了一个demo共享到我的github。关注笔者博客的小伙伴一定知道之前的这篇文章点击打开链接,这篇博客中的解决方案仅仅适用读写分离的场景。就是说,当你在开发的时候已经确定了使用写库一读库的形式。笔者今天要写...
2017-01-02 14:59:43 20330 24
原创 Java中的可变参数
Java在1.5之后允许方法使用可变参数,可变参数的好处在于:它允许传递0个或者多个参数。比如原来有一段代码如下: public class Test { public static void main(String[] args) { test(); test(new String[]{"a"}); test(new String...
2016-12-31 10:42:15 11128 2
转载 判断Ip是否在某个地址段内
public class IpTest { public static void main(String[] args) { System.out.println(isInRange("192.168.1.127", "192.168.1.64/26")); System.out.println(isInRange("192.168.1.2",
2016-12-27 12:02:58 3756
原创 Spring中的定时任务
以前在web应用中定时任务都是用的quartz,但Spring在3.0版本之后添加了Spring Task。具体的配置如下: <task:scheduled-tasks scheduler="taskScheduler"> <!--<task:scheduled ref="taskManager" method="print" cron="1/5 * ...
2016-12-17 13:56:59 603
原创 Spring的声明式事务管理
笔者之前从原理的层面讲解过Spring的事务处理,包括编程式事务处理和声明式事务处理,详见博客 Spring事务处理-编程式事务和声明式事务。这篇文章从原理的层面讲解了Spring的事务管理机制,读完了这篇博客,笔者可以一针见血的使用spring的处理机制。今天这篇博客仅仅是Spring声明式处理的正常使用,偏向工程的使用说明。还是以最近的几篇博客中常用的test工程为例,具体如下:首先,第一步:...
2016-12-17 11:47:54 668
原创 Java中的嵌套类
最近在读《Effective Java第二版》,因为笔者之前学过一些设计模式,所以对书中的多数内容可能感受不大(但这丝毫不影响这是一本好书哈)。倒是今天读到第22条——优先考虑静态成员类感觉归纳的很好,特此发博。嵌套类(nested class)是指定义在另一个类内部的类,它存在的意义就是为它的外部类提供服务。嵌套类有四种:静态成员类(static member class)非静...
2016-12-13 20:16:42 1720
原创 这样搞——保证你的代码没有try-catch
常常听到有技术圈的朋友抱怨,尤其是从其他语言转到Java语言的同行,说Java的try-catch语言让代码显得很凌乱。的确,作为一个Java Follower,笔者也觉得Java中的try-catch会导致代码很不整齐,易读性变差。那么有什么好办法让Java工程中尽量不出现try-catch语法块呢?办法还真有,请听我娓娓道来!首先,笔者带领大家回顾一下Java的异常处理机制。如下图,Java中...
2016-12-11 10:40:54 3298 2
原创 回调模式——让你的controller不再繁琐
在Java后台编程中,大家一般会使用MVC设计模式,即便使用的具体框架不尽相同。今天,我们来说说MVC中的这个C,也就是Controller。Controller是web程序中最先接触到用户request的地方,当然,前提是该request经过了身份认证和权限检查等重重考验,这一部分建议在框架的Interceptor中进行。详细内容请看笔者之前的博客玩转Spring!从拒绝Filter开始。好了,...
2016-12-10 11:30:13 4028
原创 分享一个快的飞起的maven的settings.xml文件
<?xml version="1.0" encoding="UTF-8"?><settings> <localRepository>/home/yizhen/.m2/repository</localRepository><!--需要改成自己的maven的本地仓库地址--> <mirrors&g
2016-12-04 20:24:52 48873 11
原创 玩转Spring!从拒绝Filter开始
一直以来,博客都是在写一些读书笔记或者学习心得。俗话说,举一反三,是时候沉淀一下了。索性这把这篇文章作为开端吧!笔者知道,这篇文章的题目一定让某些developer不爽,尤其是学习过J2EE基础的人。学习过J2EE基础的童鞋,一定有自己写listener,filter和servlet的经验。经验多一些是好事,但不要陶醉于自己的经验,作为developer,我们还是要进步滴,尤其是在使用Spring...
2016-11-25 07:59:16 7711 4
原创 一个常用的log4j日志文件
#根Logger,指定把INFO级别及以上的日志信息输出到D输出地和ERROR输出地log4j.rootLogger=INFO,D,ERROR#定义D输出地的相关信息log4j.appender.D=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File=/D.loglog4j.appender.D.Append=t
2016-11-21 21:59:55 1137
原创 推荐JAVA学习路线
一直以来,都想写一篇介绍JAVA学习路线的博客。为什么有这个想法?原因有两个,其一:笔者从大三开始学习JAVA,至今也3年了。由于身边缺乏老司机带路,只能自己一步步探索,深知没人指路的痛苦。所以看过很多垃圾的书籍(没办法,国内书籍市场门槛太低),但功夫不负有心人,一些经典的书籍也都撸过了(关于书籍,下文中会介绍)。其二:由于JAVA进入门槛低,所以存在一些学个SSH框架就觉得JAVA不过如此之流,...
2016-11-19 19:50:34 10071 23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人