暂时未有相关云产品技术能力~
暂无个人介绍
背景介绍在互联网的时代下,绝大部分数据都是通过网络来进行获取的。在服务端的架构中,绝大部分数据也是通过网络来进行交互的。 而且作为服务端的开发工程师来说,都会进行一系列服务设计、开发以及能力开放,而服务能力开放也是需要通过网络来完成的,因此对网络编程以及网络IO模型都不会太陌生。由于有很多优秀的框架(比如Netty、HSF、Dubbo、Thrift等)已经把底层网络IO给封装了,通过提供的API能力或者配置就能完成想要的服务能力开发,因此大部分工程师对网络IO模型的底层不够了解。本文系统的讲解了Linux内核的IO模型、Java网络IO模型以及两者之间的关系!什么是IO我们都知道在Linux
前言《阿里巴巴开发手册》中,有关于多 if-else 分支和嵌套的建议和解决方案,如下:那么本文介绍几种优化方案,给大家提供一些思路案例下面是开发中可能会遇到的典型代码:这种情况,我们如何替代多分支和分支嵌套问题呢?如何让代码变得更容易维护和拓展呢?可以先自己思考一下哈..........下面我提供几种方法吧卫语句《重构--改善既有代码的设计》 书籍中有有如下描述:如果某个条件极其罕见,就应该单独检查该条件,并在条件为真时立即从函数中返回。这样的单独检查常常被称为 “卫语句”。使用卫语句,我们可以对上面的示例修改为:先进行条件检查,然后将 if-else 逻辑转成对应的卫语句格式。枚举《Eff
前言在工作中一次排查慢接口时,查到了一个函数耗时较长,最终定位到是通过 List 去重导致的。由于测试环境还有线上早期数据较少,这个接口的性能问题没有引起较大关注,后面频繁超时,才引起重视。之前看《阿里巴巴Java开发手册》里面有这样一段描述:你看,阿里前辈们都免费总结了,不过还是会看到有人会用List的contains函数来去重......不记得的,罚抄10万遍如果需要这本书资源的网上下载也行,私聊我发你也行今天我就结合源码聊聊Set是怎样保证数据的唯一性的,为什么两种去重方式性能差距这么大HashSet源码底层实现基于 HashMap,所以迭代时不能保证按照插入顺序,或者其它顺序进行迭代
前言前几天重新看 《阿里巴巴Java开发手册》有一条这样的规约:看到这,我们先可以思考下面几个问题:switch 除了 String 还支持哪种类型?为什么《阿里巴巴Java开发手册》规定String类型参数要先进行 null 判断?为什么可能会抛出空指针异常?同时switch 语句必须满足以下条件,否则会出现编译错误:与 switch 语句关联的每个 case 都必须和 switch 的表达式的类型一致;如果 switch 表达式是枚举类型,case 常量也必须是枚举类型;不允许同一个 switch 的两个 case 常量的值相同;和 switch 语句关联的常量不能为 null一个 sw
"工欲善其事 必先利其器",一些好的工具确实可以提高工作效率,之前分享过几篇工具文章分享一些工作中常用的工具软件,值得收藏!分享一些常用的网站和工具,值得收藏!本篇文章主要分享一些工作中常用的IDEA插件,希望大家有帮助!文章首发在公众号(月伴飞鱼),之后同步到个人网站:xiaoflyfish.cn/Java Stream DebuggerJDK1.8新增的Stream流操作,极大地提升了编程快感,也精简了代码。同时,存在一个问题,debugger下不易调试,不能一行一行地看到执行结果。Java Stream Debugger 这个插件解决了此问题。Jclasslib bytecode v
假设现在有一篇很长的文档,如果希望统计文档中每个单词在文档中出现了多少次,应该怎么做呢?很简单!我们可以建一个HashMap,以String类型为Key,Int类型为Value;遍历文档中的每个单词 word ,找到键值对中key为 word 的项,并对相关的value进行自增操作。如果该key= word 的项在 HashMap中不存在,我们就插入一个(word,1)的项表示新增。这样每组键值对表示的就是某个单词对应的数量,等整个文档遍历完成,我们就可以得到每个单词的数量了。简单实现下,代码示例如下:那HashMap是怎么做到高效统计单词对应数量的?我们下面会逐步来研究一下!首先我们先来
前言最近看公司代码,多线程编程用的比较多,其中有对CompletableFuture的使用,所以想写篇文章总结下在日常的Java8项目开发中,CompletableFuture是很强大的并行开发工具,其语法贴近java8的语法风格,与stream一起使用也能大大增加代码的简洁性大家可以多应用到工作中,提升接口性能,优化代码文章首发在公众号(月伴飞鱼),之后同步到个人网站:xiaoflyfish.cn/觉得有收获,希望帮忙点赞,转发下哈,谢谢,谢谢基本介绍CompletableFuture是Java 8新增的一个类,用于异步编程,继承了Future和CompletionStage用于实现流式处
简介正则表达式,又称规则表达式,通常被用来检索、替换那些符合某个模式(规则)的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。学会使用正则表达式可以极大提高我们文本处理效率,并且各大操作系统、编程语言、文本编辑器都已经支持正则表达式在线正则测试工具:regex101.com/r/PnzZ4k/1下面的例子我会使用Sublime Text(对了,这个工具也非常好用)实现元字符一般普通字符表示的还是原来的意思,比如字符 e所谓元字符(*Metacharacter*)就是指那些在正则表达式中具有特殊意义的专用字符s 能匹配上各种空白
类成员与方法的可见性最小化举例:如果是一个private的方法,想删除就删除如果一个public的service方法,或者一个public的成员变量,删除一下,不得思考很多。使用位移操作替代乘除法计算机是使用二进制表示的,位移操作会极大地提高性能。<< 左移相当于乘以 2;>> 右移相当于除以 2;>>> 无符号右移相当于除以 2,但它会忽略符号位,空位都以 0 补齐。尽量减少对变量的重复计算我们知道对方法的调用是有消耗的,包括创建栈帧、调用方法时保护现场,恢复现场等。不要捕捉RuntimeExceptionRuntimeException 不应该通过 catch 语句去捕捉,而应该使用编
ForEach集合的遍历Mapmap 方法可以让我们进行一些流的转化,比如原来流中的元素是 A,通过 map 操作,可以使返回的流中的元素是 BFilterFilter 为过滤的意思,只要满足 Filter 表达式的数据就可以留下来,不满足的数据被过滤掉MapToIntmapToInt 方法的功能和 map 方法一样,只不过 mapToInt 返回的结果已经没有泛型,已经明确是 int 类型的流了,源码如下:SortedSorted 方法提供了排序的功能,并且允许我们自定义排序groupingBygroupingBy 是能够根据字段进行分组,toMap 是把 List 的数
我们知道Bean的生命周期分为几个主干流程Bean(单例非懒加载)的实例化阶段Bean的属性注入阶段Bean的初始化阶段Bean的销毁阶段下面是整个Spring容器的启动流程,可以看到除了上述几个主干流程外,Spring还提供了很多扩展点有时候整个项目工程中bean的数量有上百个,而大部分单测依赖都是整个工程的xml,导致单测执行时需要很长时间(大部分时间耗费在xml中数百个单例非懒加载的bean的实例化及初始化过程)解决方法:利用Spring提供的扩展点将xml中的bean设置为懒加载模式,省去了Bean的实例化与初始化时间「InstantiationAwareBeanPostProces
1.Redis是基于一个Request,一个Response的同步请求服务2.客户端将数据包发送至服务器,然后服务器再将响应数据发送回客户端,这都需要花费一定时间的。这段时间被称为往返时间RTT(Round Trip Time)。当一个客户端需要连续执行很多请求时,就很容易看出往返时间是影响系统性能的例如:如果往返时间RTT是250毫秒,即使Redis服务器每秒钟能处理1000个请求,我们也只能每秒钟最多处理四个请求。Redis提供了一种Pipeline(管道)方法可以改善上述用例的性能,下面看看。可以看到,客户端首先将执行的命令写入到缓冲区(内存)中,最后再一次性发送 Redis。pipe