共 55 条数据

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

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

置顶

640次浏览 35条评论

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

面试题:如何解决分布式事务问题
技术杂谈

面试题:如何解决分布式事务问题

28次浏览 0条评论

面试题1、分布式事务了解吗?2、你们是如何解决分布式事务问题的?面试官心理分析只要聊到你做了分布式系统,必问分布式事务,你对分布式事务一无所知的话,确实会很坑,你起码得知道有哪些方案,一般怎么来做,每个方案的优缺点是什么。现在面试,分布式系统成了标配,而分布式系统带来的分布式事务也成了标配了。因为你做系统肯定要用事务吧,如果是分布式系统,肯定要用分布式事务吧。先不说你搞过没有,起码你得明白有哪几种方案,每种方案可能有啥坑?比如 TCC 方案的网络问题、XA 方案的一致性问题。面试题剖析分布式事务的实现主要有以下 5 种方案:XA 方案TCC 方案本地消息表可靠消息最终一致性方案最大努力通知方案两阶段提交方案/XA方案所谓的 XA 方案,即:两阶段提交,有一个事务管理器的概念,负责协调多个数据库(资源管理器)的事务,事务管理器先问问各个数据库你准备好了吗?如果每个数据库都回复 ok,那么就正式提交事务,在各个数据库上执行操作;如果任何其中一个数据库回答不 ok,那么就回滚事务。这种分布式事务方案,比较适合单块应用里,跨多个库的分布式事务,而且因为严重依赖于数据库层面来搞定复杂的事务,效率

Spring Cloud深入系列 PDF合集下载
技术杂谈

Spring Cloud深入系列 PDF合集下载

212次浏览 0条评论

《Spring Cloud微服务架构进阶》朱荣鑫等著《Spring Cloud微服务实战》翟永超著《Spring Cloud与Docker微服务架构实战(第2版)》周立著《Spring Cloud微服务:全栈技术与案例解析》 尹吉欢著

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

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

159次浏览 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题 含答案(面试宝典)

302次浏览 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机制

116次浏览 0条评论

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

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

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

125次浏览 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等,安装成功后外网连接失败的通用解决方案

266次浏览 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)实现

363次浏览 0条评论

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

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

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

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

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

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

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

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

1031次浏览 0条评论

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

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

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

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

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

304次浏览 0条评论

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

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

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

263次浏览 0条评论

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

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

如何分析一条SQL的性能

252次浏览 0条评论

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

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

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

607次浏览 0条评论

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

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

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

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

277次浏览 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的区别

252次浏览 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协议详解(经典篇)

242次浏览 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的区别和优缺点

712次浏览 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. 一旦用户注

Java性能优化的50个细节
技术杂谈

Java性能优化的50个细节

304次浏览 0条评论

在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身。养成良好的编码习惯非常重要,能够显著地提升程序性能。1. 尽量在合适的场合使用单例使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:第一,控制资源的使用,通过线程同步来控制资源的并发访问;第二,控制实例的产生,以达到节约资源的目的;第三,控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信。推荐阅读:设计模式之单例模式实践。2. 尽量避免随意使用静态变量当某个对象被定义为static变量所引用,那么GC通常是不会回收这个对象所占有的内存,如public class A{private static B b = new B();}此时静态变量b的生命周期与A类同步,如果A类不会卸载,那么b对象会常驻内存,直到程序终止。3. 尽量避免过多过常地创建Java对象尽量避免在经常调用的方法,循环中new对象,由于系统不仅要花费时间来创建对象,而且还要花时间对这些对象进行垃圾回收和处理,在我们可以控制的范围内,最大限度地重用

不可不说的Java“锁”事
技术杂谈

不可不说的Java“锁”事

274次浏览 0条评论

前言Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文内容的总体分类目录:1. 乐观锁 VS 悲观锁乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Java和数据库中都有此概念对应的实际应用。先说概念。对于同一个数据的并发操作,悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。Java中,synchronized关键字和Lock的实现类都是悲观锁。而乐观锁认为自己在使用数据时不会有别的线程修改数据,所以不会添加锁,只是在更新数据的时候去判断之前有没有别的线程更新了这个数据。如果这个数据没有被更新,当前线程将自己修改的数据成功写入。如果数据已经被其他线程更新,则根据不同的实现方式执行不同的操作(例如报错或者自动

JavaWeb 乱码问题终极解决方案!
技术杂谈

JavaWeb 乱码问题终极解决方案!

255次浏览 0条评论

对于一些老司机而言,其实并不太容易遇到乱码问题,但是对于一些新手来说,乱码几乎是家常便饭,而且每当乱码时,网上搜了一大堆解决方案,发现自己的问题还是没能解决,其实这就是平时研究代码不求甚解导致的,乱码问题,也要去分析,然后才能对症下药,才能药到病除。整体思路首先出现乱码之后,要先去确认乱码的地方,当一个网页上出现乱码,有可能是浏览器显示问题,也有可能是 Java 编码问题,也有可能数据库中的数据本身就是乱码的,所以我们要做的第一件事就是确认乱码发生的位置,缩小 bug 范围,通过打印日志或者 debug 首先去确认乱码发生的位置,然后再去进一步解决,一般来说,乱码的原因大致上可以分为两类:请求乱码响应乱码请求乱码,可能是因为参数放在 URL 地址中乱码,也有可能是参数放在请求体中乱码,不同传参方案也对应了不同的乱码解决方案。如果是响应乱码,那么原因就会比较多了,一般来说,有如下几种可能的原因:数据库本身乱码数据在 Java 代码中乱码数据在浏览器显示的时候乱码数据在从 Java 应用传到数据库的过程中乱码对于不同的乱码原因,会有不同的解决方案,对症下药,才能药到病除,所以当出现乱码时,

最全Spring面试71题与答案:IOC+AOP+事务+Bean装配+注解
技术杂谈

最全Spring面试71题与答案:IOC+AOP+事务+Bean装配+注解

470次浏览 0条评论

1.什么是spring?Spring是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。2.使用Spring框架的好处是什么?轻量:Spring是轻量的,基本的版本大约2MB。控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。容器:Spring包含并管理应用中对象的生命周期和配置。MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。事务管理:Spring提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。异常处理:Spring提供方便的API把具体技术相关的异常(比如由JDBC,HibernateorJDO抛出的)转化为一致的unchecked异常。3.Spring由哪些模块组成?以下是Spring框架的基本模块:Co