共 53 条数据

【福利】找不到资源?没有CSDN积分?在这里留言,java菜市场帮你找!
技术杂谈

【福利】找不到资源?没有CSDN积分?在这里留言,java菜市场帮你找!

置顶

345次浏览 20条评论

如果你想找的资源,在java菜市场中没有搜到,如IT相关的电子书、视频教程、考研资料等。都可以在这里留言,java菜市场帮你找。留言的电子邮箱请填写真实邮箱,以便接收回复通知!声明:java菜市场也是在网络上搜集资源,不代表所有留言的资源都能被找到,望理解。可通过手机QQ扫描下方二维码加入java菜市场官方QQ群,期待你的加入。

java实现多张图片和文字合并 java图片合成示例代码
技术杂谈

java实现多张图片和文字合并 java图片合成示例代码

120次浏览 0条评论

我们通过java把下面的背景图和二维码以及文字“java菜市场-专注于技术干货的免费分享”合并成一张新的图片背景图片二维码图片public class Main {     /**      * 合成图片      *      * @param backgroundPath      * @param qrCodePath      * @param message      * @param outPutPath      * @throws IOException      */     public static void overlapImage(String backgroundPath, String qrCodePath, String message, String outPutPath) throws IOException {         // 设置背景图片大小         BufferedImage backgroundImage = resizeImage(566, 230, ImageIO.read(new File(backgroundPat

2019最全java面试题 题库大全800题 含答案(面试宝典)
技术杂谈

2019最全java面试题 题库大全800题 含答案(面试宝典)

202次浏览 0条评论

1、 meta标签的作用是什么2、 ReenTrantLock可重入锁(和synchronized的区别)总结3、 Spring中的自动装配有哪些限制?4、 什么是可变参数?5、 什么是领域模型(domain model)?贫血模型(anaemic domain model)和充血模型(rich domain model)有什么区别?6、 说说http,https协议7、"= ="和equals方法究竟有什么区别?8、&和&&的区别?9、.super.getClass()方法调用?10、10条SQL优化技巧11、10道经典java面试题_实习生必问!12、15个Java线程并发面试题和答案13、15个高级Java多线程面试题及回答14、2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据15、2018年java分布式相关最新面试题16、2018最新java技术面试题与答案17、23种经典设计模式都有哪些,如何分类?18、4个Spring常见面试题及答案解析19、58到家MySQL数据库开发规范20、9条改善Java性能的小建议21、9道常见的java笔试

高级开发必须理解的Java中SPI机制
技术杂谈

高级开发必须理解的Java中SPI机制

90次浏览 0条评论

本文通过探析JDK提供的,在开源项目中比较常用的Java SPI机制,希望给大家在实际开发实践、学习开源项目提供参考。1 SPI是什么SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。整体机制图如下:Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。系统设计的各个抽象,往往有很多不同的实现方案,在面向的对象的设计里,一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候能不在程序里动态指明,这就需要一种服务发现机制。Java SPI就是提供这样的一个机制:为某个接口寻找服务实现的机制。有点类似IOC的思想,就是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要。所以SPI的核心思想就是解耦。2 使用场景概括地说,适用于:调用者根据实际使用需要,启用、扩展、或者替换框架的实现策略比较常见的例子:数据库驱动加载接口实现类的加载J

别在 Java 代码里乱打日志了,这才是正确的打日志姿势!
技术杂谈

别在 Java 代码里乱打日志了,这才是正确的打日志姿势!

91次浏览 0条评论

1.使用 slf4j使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。实现方式统一使用: Logback 框架2.打日志的正确方式什么时候应该打日志?当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统,是可以通过日志进行问题定为的。当你碰到if…else 或者 switch这样的分支时,要在分支的首行打印日志,用来确定进入了哪个分支经常以功能为核心进行开发,你应该在提交代码前,可以确定通过日志可以看到整个流程2.1 基本格式必须使用参数化信息的方式:logger.debug("Processing trade with id:[{}] and symbol : [{}] ", id, symbol);对于 debug 日志,必须判断是否为 debug 级别后,才进行使用:if (logger.isDebugEnabled()) {    logger.debug("Processing trade with id: " +id + " symbol: " + symbol);}不要进行字符串拼接,那样会产生很多 String 对象,占用空间,

阿里云CentOS安装SVN、Redis、MySQL、Nexus等,安装成功后外网连接失败的通用解决方案
技术杂谈

阿里云CentOS安装SVN、Redis、MySQL、Nexus等,安装成功后外网连接失败的通用解决方案

235次浏览 1条评论

站长之前整理了如何在阿里云CentOS服务器下安装SVN、Redis、MySQL、Nexus,都是站长一步步亲自安装,自测通过的。CentOS7下搭建配置SVN服务器CentOS7使用yum安装MySQLCentOS7安装Redis4.0.2及常见报错解决CentOS7安装maven私服Nexus有些小伙伴反映能安装成功,但是本机程序或浏览器访问会出现无法连接的情况,一般这种情况很多都是因为阿里云ECS服务器的安全组配置和服务器的防火墙原因导致。站长以SVN服务器的3690端口为例,介绍一下解决方案。1、打开阿里云控制台首页,打开云服务器管理控制台 -->网络与安全-->安全组2、点击安全组列表中的配置规则3、点击添加安全组规则4、在端口范围加入你要添加的端口,确定提交。可以同时添加多个端口,如果3690/3692,即可同时添加3690、3691、3692 3个端口5、配置服务器防火墙通过 firewall-cmd --list-all 命令,查询防火墙配置如果提示"FirewallD is not running",说明防火墙没有开启,可以通过 systemctl sta

MybatisPlus 多租户架构(Multi-tenancy)实现
技术杂谈

MybatisPlus 多租户架构(Multi-tenancy)实现

302次浏览 0条评论

在进行多租户架构(Multi-tenancy)实现之前,先了解一下相关的定义吧:什么是多租户多租户技术或称多重租赁技术,简称SaaS,是一种软件架构技术,是实现如何在多用户环境下(此处的多用户一般是面向企业用户)共用相同的系统或程序组件,并且可确保各用户间数据的隔离性。简单讲:在一台服务器上运行单个应用实例,它为多个租户(客户)提供服务。从定义中我们可以理解:多租户是一种架构,目的是为了让多用户环境下使用同一套程序,且保证用户间数据隔离。那么重点就很浅显易懂了,多租户的重点就是同一套程序下实现多用户数据的隔离。数据隔离方案多租户在数据存储上存在三种主要的方案,分别是:独立数据库即一个租户一个数据库,这种方案的用户数据隔离级别最高,安全性最好,但成本较高。优点:为不同的租户提供独立的数据库,有助于简化数据模型的扩展设计,满足不同租户的独特需求;如果出现故障,恢复数据比较简单。缺点:增多了数据库的安装数量,随之带来维护成本和购置成本的增加。共享数据库,独立 Schema多个或所有租户共享Database,但是每个租户一个Schema(也可叫做一个user)。底层库比如是:DB2、ORACL

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

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

236次浏览 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 及常见报错解决

304次浏览 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(*) 效率高么?

229次浏览 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

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

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

821次浏览 0条评论

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

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

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

1041次浏览 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?

443次浏览 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中如何使用设计模式

259次浏览 0条评论

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

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

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

228次浏览 0条评论

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

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

如何分析一条SQL的性能

233次浏览 0条评论

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

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

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

426次浏览 0条评论

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

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

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

388次浏览 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!

243次浏览 0条评论

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