共 45 条数据

推荐一款阿里开源的 Java 诊断工具 Arthas(阿尔萨斯)  好用到爆!
技术杂谈

推荐一款阿里开源的 Java 诊断工具 Arthas(阿尔萨斯) 好用到爆!

115次浏览 0条评论

Arthas是什么鬼?Arthas是一款阿里巴巴开源的 Java 线上诊断工具,功能非常强大,可以解决很多线上不方便解决的问题。Arthas诊断使用的是命令行交互模式,支持JDK6+,Linux、Mac、Windows 操作系统,命令还支持使用 tab 键对各种信息的自动补全,诊断起来非常利索。这是它的官方网站:https://alibaba.github.io/arthas/index.htmlGithub地址:https://github.com/alibaba/arthasArthas能解决什么问题?让我们来看下 Arthas 的官方解释。当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 1、这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 2、我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 3、遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 4、线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!5、是否有一个全局视角来查看系统的运行状况? 6、有什么办法可以监控到JVM的实

CentOS7安装maven3.3.9 及常见报错解决
技术杂谈

CentOS7安装maven3.3.9 及常见报错解决

188次浏览 0条评论

1、进入要安装maven的目录,以/usr/local为例 cd /usr/local 2、下载maven3.3.9tar包 wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz 3、解压tar包 tar -zxvf apache-maven-3.3.9-bin.tar.gz 4、当前maven安装包所在目录为 /usr/local/apache-maven-3.3.9,可以根据需要移动到自己想要的位置 5、设置环境变量 vim /etc/profile 在profile文件末尾添加一下内容: export M2_HOME=/usr/local/apache-maven-3.3.9 export PATH=$M2_HOME/bin:$PATH 6、使修改的profile文件立即生效: source /etc/profile 7、输入mvn -v命令,显示一下内容,安装成功 Apache Maven 3.3.9 (bb52d8502b

你是一直认为MySQL count(1) 比 count(*) 效率高么?
技术杂谈

你是一直认为MySQL count(1) 比 count(*) 效率高么?

157次浏览 0条评论

MySQL count(1) 真的比 count(*) 快么? 反正同事们都是这么说的,我也姑且觉得对吧,那么没有自己研究一下究竟?如果我告诉你他们一样,你信么?有 Where 条件的 count,会根据扫码结果count 一下所有的行数,其性能更依赖于你的 Where 条件,所以文章我们仅针对没有 Where 的情况进行说明。MyISAM 引擎会把一个表的总行数记录了下来,所以在执行 count(*) 的时候会直接返回数量,执行效率很高。在 MySQL 5.5 以后默认引擎切换为 InnoDB,InnoDB 因为增加了版本控制(MVCC)的原因,同时有多个事务访问数据并且有更新操作的时候,每个事务需要维护自己的可见性,那么每个事务查询到的行数也是不同的,所以不能缓存具体的行数,他每次都需要 count 一下所有的行数。那么 count(1) 和 count(*)有区别么?InnoDB handles SELECT COUNT(*) and SELECT COUNT(1) operations in the same way. There is no performance diffe

这些年,阿里巴巴技术大牛们曾经写过的那些书籍!附下载地址!
技术杂谈

这些年,阿里巴巴技术大牛们曾经写过的那些书籍!附下载地址!

444次浏览 0条评论

阿里巴巴,一直都是程序员们非常向往的企业,这里汇聚了全国最顶尖的程序员,这里的技术大牛也一直很愿意和外界分享他们的经验心得,撰写了一系列技术博客、书籍等,本文,猿哥整理了近年来阿里巴巴技术大牛们撰写的那些书籍,涵盖Java、大数据、面试企业架构等方面Java系列1、《阿里巴巴Java开发手册》作者:杨冠宝,阿里巴巴集团高级技术专家,在阿里历任技术研发、架构师、部门主管等不同的角色本手册以开发者为中心视角,划分为编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约七个维度,每个条目下有相应的扩展解释和说明,正例和反例,全面、立体、形象地帮助到开发者的成长和团队代码规约文化的形成。2、《码出高效:Java开发手册》作者:杨冠宝,阿里巴巴集团高级技术专家,在阿里历任技术研发、架构师、部门主管等不同的角色;高海慧,阿里云资深开发工程师,先后在阿里巴巴集团B2B技术部和阿里云任职源于影响了全球250万名开发工程师的《阿里巴巴Java开发手册》,作者静心沉淀,对Java规约的来龙去脉进行了全面而彻底的内容梳理。《码出高效:Java 开发手册》以实战为中心,以新颖的角度全面阐

阿里程序员常用的 15 款开发者工具(建议收藏)
技术杂谈

阿里程序员常用的 15 款开发者工具(建议收藏)

220次浏览 0条评论

从人工到自动化,从重复到创新,技术演进的历程中,伴随着开发者工具类产品的发展。阿里巴巴将自身在各类业务场景下的技术积淀,通过开源、云上实现或工具等形式对外开放,本文将精选了一些阿里巴巴的开发者工具,希望能帮助开发者们提高开发效率、更优雅的写代码。 由于开发者涉及的技术领域众多,笔者仅从自己熟悉的领域,以后端开发者的视角盘点平时可能用得到的工具。每个工具按照以下几点进行介绍:1. 工具名称和简介2. 使用场景一、Java 线上诊断工具 ArthasArthas 阿里巴巴2018年9月开源的一款Java线上诊断工具。工具的使用场景:1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!5. 是否有一个全局视角来查看系统的运行状况?6. 有什么办法可以监控到JVM的实时运行状态?Arthas支持JDK 6 ,支持Linux/Mac/Window

为什么项目中用了JOOQ后大家都不愿再用Mybatis?
技术杂谈

为什么项目中用了JOOQ后大家都不愿再用Mybatis?

224次浏览 0条评论

前言今天给大家介绍一个新的ORM框架->JOOQ,可能很多朋友还没有听说过这个框架,码农哥之前也是一直在使用Mybatis框架作为Java工程中的持久层访问框架,但是最近的一些项目采用JOOQ框架开发后,码农哥表示再也不想用Mybatis了!为什么这么说呢?因为JOOQ在代码层面要比Mybatis简洁得多,而且性能也非常优异。相信大家都有过这样的体会,我们在项目工程中使用Mybatis进行数据库相关代码的编写时,为了提高工程效率,一般会在数据库模型设计完成后,一次性使用Mybatis代码插件(如:mybatis-generator),来生成Mybatis数据库访问的实体类代码以及XML、Mapper等映射代码,从而尽量以面向对象的方式来操作和访问数据库。而通过这样的方式,虽然在工程效率上提高了很多,但是从代码的简洁和优雅性上来说就会让人感觉特别的啰嗦,因为自动生成的代码并不完全都是你在项目中能够用得到的。所以,有些对代码有追求的同学就会以比较简洁的方式来手写SQL代码。如在@Mapper接口中编写这样的代码:@Select("select max(t.balance_id) fr

Spring中如何使用设计模式
技术杂谈

Spring中如何使用设计模式

159次浏览 0条评论

关于设计模式,如果使用得当,将会使我们的代码更加简洁,并且更具扩展性。本文主要讲解Spring中如何使用策略模式,工厂方法模式以及Builder模式。1.策略模式关于策略模式的使用方式,在Spring中其实比较简单,从本质上讲,策略模式就是一个接口下有多个实现类,而每种实现类会处理某一种情况。我们以发奖励为例进行讲解,比如我们在抽奖系统中,有多种奖励方式可供选择,比如积分,虚拟币和现金等。在存储时,我们必然会使用一个类似于type的字段用于表征这几种发放奖励的,那么这里我们就可以使用多态的方式进行奖励的发放。比如我们抽象出一个PrizeSender的接口,其声明如下:public interface PrizeSender {  /**   * 用于判断当前实例是否支持当前奖励的发放   */  boolean support(SendPrizeRequest request);  /**   * 发放奖励   */  void sendPrize(SendPrizeRequest request);}该接口中主要有两个方法:support()和sendPrize(),其中suppor

图解 Java 垃圾回收机制,写得非常好!
技术杂谈

图解 Java 垃圾回收机制,写得非常好!

136次浏览 0条评论

什么是自动垃圾回收?自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未使用中的对象(未引用对象),则没有被任何指针给指向,因此占用的内存也可以被回收掉。在用 C 之类的编程语言时,程序员需要自己手动分配和释放内存。而 Java 不一样,它有垃圾回收器,释放内存由回收器负责。本文接下来将介绍垃圾回收机制的基本过程。第一步:标记垃圾回收的第一步是标记。垃圾回收器此时会找出哪些内存在使用中,还有哪些不是。上图中,蓝色表示已引用对象,橙色表示未引用对象。垃圾回收器要检查完所有的对象,才能知道哪些有被引用,哪些没。如果系统里所有的对象都要检查,那这一步可能会相当耗时间。关注Java技术栈微信公众号,回复:JVM46,可以获取一份超全 JVM 调优攻略。第二步:清除这一步会删掉标记出的未引用对象。内存分配器会保留指向可用内存的引用,以供分配新对象。压缩为了提升性能,删除了未引用对象后,还可以将剩下的已引用对象放在一起(压缩),这样就能更简单快捷地分配新对象了。为什么需要分代垃圾收集?之前说

如何分析一条SQL的性能
技术杂谈

如何分析一条SQL的性能

166次浏览 0条评论

这篇文章将给大家介绍如何使用 explain 来分析一条 sql 。网上其实已经有非常多的文章都很详细的介绍了 explain 的使用,这篇文章将实例和原理结合起来,尽量让你有更好的理解,相信我,认真看完你应该会有特别的收获。explain 翻译过来就是解释的意思, 在 mysql 里被称作执行计划,即可以通过该命令看出 mysql 在经过优化器分析后决定要如何执行该条 sql 。说到优化器,再多说一句,mysql 内置了一个强大的优化器,优化器的主要任务就是把你写的 sql 再给优化一下,尽可能以更低成本去执行,比如扫描更少的行数,避免排序等。执行一条sql语句都经历了什么? 我在前面的文章中有介绍过优化器相关的。你可能会问,一般在什么时候会要用 explain 呢,大多数情况下都是从 mysql 的慢查询日志中揪出来一些查询效率比较慢的 sql 来使用 explain 分析,也有的是就是在对 mysql 进行优化的时候,比如添加索引,通过 explain 来分析添加的索引能否被命中,还有的就是在业务开发的时候,在满足需求的情况下,你可能需要通过 explain 来选择一个更高效的

java架构师100G整套视频、文档资料下载
技术杂谈

java架构师100G整套视频、文档资料下载

246次浏览 0条评论

站长整理了之前云栖社区发布的整套java架构师系列资料,分享给需要的同学们近期百度网盘对于资料屏蔽的比较频繁,如果下载链接失效,说明资源已被和谐;有需要的同学可加java菜市场官方QQ群 276899044 @群主 即可获取(可通过手机QQ扫描下方二维码加群)

JVM 性能调优工具讲解 jstat、jmap、jstack、jinfo
技术杂谈

JVM 性能调优工具讲解 jstat、jmap、jstack、jinfo

245次浏览 0条评论

1、jstat摘要: Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。jstat 用法$ jstat -help Usage: jstat -help|-options        jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]] Definitions:   <option>      An option reported by the -options option   <vmid>        Virtual Machine Identifier. A vmid takes the following form:                      <lv

不了解这12个语法糖,别说你会Java!
技术杂谈

不了解这12个语法糖,别说你会Java!

156次浏览 0条评论

本文从 Java 编译原理角度,深入字节码及 class 文件,抽丝剥茧,了解 Java 中的语法糖原理及用法,帮助大家在学会如何使用 Java 语法糖的同时,了解这些语法糖背后的原理语法糖语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。简而言之,语法糖让程序更加简洁,有更高的可读性。有意思的是,在编程领域,除了语法糖,还有语法盐和语法糖精的说法,篇幅有限这里不做扩展了。我们所熟知的编程语言中几乎都有语法糖。作者认为,语法糖的多少是评判一个语言够不够牛逼的标准之一。很多人说Java是一个“低糖语言”,其实从Java 7开始Java语言层面上一直在添加各种糖,主要是在“Project Coin”项目下研发。尽管现在Java有人还是认为现在的Java是低糖,未来还会持续向着“高糖”的方向发展。解语法糖前面提到过,语法糖的存在主要是方便开发人员使用。但其实,Java虚拟机并不支持这些语法糖。这些语法糖在编译阶段就会被还原成简单的基础语

在Java的反射中,Class.forName和ClassLoader的区别
技术杂谈

在Java的反射中,Class.forName和ClassLoader的区别

156次浏览 0条评论

前言最近在面试过程中有被问到,在Java反射中Class.forName()加载类和使用ClassLoader加载类的区别。当时没有想出来后来自己研究了一下就写下来记录一下。解释在java中Class.forName()和ClassLoader都可以对类进行加载。ClassLoader就是遵循双亲委派模型最终调用启动类加载器的类加载器,实现的功能是“通过一个类的全限定名来获取描述此类的二进制字节流”,获取到二进制流后放到JVM中。Class.forName()方法实际上也是调用的CLassLoader来实现的。Class.forName(String className);这个方法的源码是    @CallerSensitive     public static Class<?> forName(String className) throws ClassNotFoundException {         Class<?> caller = Reflection.getCallerClass();         return forName0(class

HTTP协议详解(经典篇)
技术杂谈

HTTP协议详解(经典篇)

160次浏览 0条评论

引言HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。HTTP协议的主要特点可概括如下:1.支持客户/服务器模式。2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每

用户认证:基于jwt和session的区别和优缺点
技术杂谈

用户认证:基于jwt和session的区别和优缺点

408次浏览 0条评论

背景知识:Authentication和Authorization的区别:Authentication:用户认证,指的是验证用户的身份,例如你希望以小A的身份登录,那么应用程序需要通过用户名和密码确认你真的是小A。Authorization:授权,指的是确认你的身份之后提供给你权限,例如用户小A可以修改数据,而用户小B只能阅读数据。由于http协议是无状态的,每一次请求都无状态。当一个用户通过用户名和密码登录了之后,他的下一个请求不会携带任何状态,应用程序无法知道他的身份,那就必须重新认证。因此我们希望用户登录成功之后的每一次http请求,都能够保存他的登录状态。目前主流的用户认证方法有基于token和基于session两种方式。基于session的用户认证基于session的认证流程如下:1. 用户输入其登录信息2. 服务器验证信息是否正确,并创建一个session,然后将其存储在数据库中3. 服务器为用户生成一个sessionId,将具有sesssionId的Cookie将放置在用户浏览器中4. 在后续请求中,会根据数据库验证sessionID,如果有效,则接受请求5. 一旦用户注