自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 收藏
  • 关注

原创 ThreadLocal夺命11连问

前言前一段时间,有同事使用ThreadLocal踩坑了,正好引起了我的兴趣。所以近期,我抽空把ThreadLocal的源码再研究了一下,越看越有意思,发现里面的东西还真不少。我把精华浓缩了一下,汇集成了下面11个问题,看看你能顶住第几个?1. 为什么要用ThreadLocal?并发编程是一项非常重要的技术,它让我们的程序变得更加高效。但在并发的场景中,如果有多个线程同时修改公共变量,可能会出现线程安全问题,即该变量最终结果可能出现异常。为了解决线程安全问题,JDK出现了很多技术手段,比如:使

2022-05-22 18:08:42 873

原创 idea配Git的使用技巧和注意事项,针对特定场景进行分析

解决 【git checkout -b dev origin/dev】报错的问题背景报错信息解决方法背景把远程库的 dev 分支拉倒本地的 dev 分支时使用指令:$ git checkout -b dev origin/dev说明:-b 表示本地创建 dev 分支并切换到 dev 分支上;origin/dev 表示远程库的 dev 分支。报错信息解决方法$ git fetch origin dev // 命令来把远程分支拉到本地$ git checkout -b

2020-12-26 13:29:20 723

原创 记一次Tomcat日志分析:一个或多个listeners启动失败,更多详细信息查看对应的容器日志文件

1 问题我将一个应用,MicroStrategy-11.3.0000.13515,部署到Tomcat。然后,我点击start后报错:FAIL - Application at context path [/MicroStrategy-11.3.0000.13515] could not be started2 解决方案如果你谷歌报错信息的话,你会发现造成这个报错信息的场景有很多。换而言之,这个报错信息不明确。比如这个问题:FAIL - Application at context path

2020-10-12 10:49:28 5365

原创 token的主要用法

一、跨域认证的问题互联网服务离不开用户认证。一般流程是下面这样。1、用户向服务器发送用户名和密码。2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。3、服务器向用户返回一个 session_id,写入用户的 Cookie。4、用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器。5、服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。这种模式的问题在于,扩展性(scaling)不好。单机

2020-10-10 10:04:53 1937

原创 JWT -- JSON WEB TOKEN

什么是JWTJson web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。起源说起JWT,我们应该来谈一谈基于token的认证和传统的session认证的区别。

2020-10-09 15:41:55 98

原创 前端常见跨域解决方案(全)

什么是跨域?跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。广义的跨域:1.) 资源跳转: A链接、重定向、表单提交2.) 资源嵌入: \<link>、\<script>、\<img>、\<frame>等dom标签,还有样式中background:url()、@font-face()等文件外链3.) 脚本请求: js发起的ajax请求、dom和js对象的跨域操作等其实我们通常所说的跨域是狭义的,是由浏览器同源策略限制的一

2020-10-03 17:48:08 644

原创 为什么jsonp只支持get请求?

JSONP的原理JSONP 是一种【请求一段 JS 脚本,把执行这段脚本的结果当做数据】的玩法。所以,你能 POST 一段通过 script 标签引入的脚本吗?(如果看过 JSONP 库的源码就知道,常见的实现代码其实就是 document.createElement(‘script’) 生成一个 script 标签,然后插 body 里而已。在这里根本没有设置请求格式的余地)。所以JSONP的实现原理就是创建一个script标签, 再把需要请求的api地址放到src里. 这个请求只能用GET方法,

2020-10-03 11:12:25 963

原创 没错,就是Access-Control-Allow-Origin,跨域

1、浏览器的同源安全策略没错,就是这家伙干的,浏览器只允许请求当前域的资源,而对其他域的资源表示不信任。那怎么才算跨域呢?请求协议http,https的不同域domain的不同端口port的不同好好好,大概就是这么回事啦,下面我们讲2种中规中矩的办法:CORS,JSONPdocument.domain,window.name,web sockets就先别闹了,腰不好 : )2、CORS出来搞事了这是W3C的大佬们搞出来的标准,全称是"跨域资源共享"(Cross-origin resour

2020-10-03 09:43:53 293

原创 解决跨域session 同步问题

跨域来源:(前端站点和后端API布署到不同的站点)解决方案一.服务端设置1.配置允许跨域请求public class BaseAction { /** * 支持跨域请求 * @author fxd * @param response * @since JDK 1.6 */ protected void crossComain(HttpServletRequest request,HttpServletResponse respon

2020-09-30 17:17:11 268

原创 跨域请求的2种应用场景和2种解决方案

文章目录应用场景解决方案示例:jsonp+springmvc4.2jsonp请求,原生js原理图jsonp请求,juquey实现原理图客户端服务端2种写法:cros解决方案 angularjs+sprngmvc4.2cors原理:前端代码后端写法1:后端写法2:应用场景1.第一种是: 前端jquery,后端springmvc4.22.第二种是: 前端angularjs,后端springmvc4.2解决方案1.第一种场景我们用jsonp方式解决2.第二种场景我们用CORS方式解决示例:

2020-09-30 15:50:36 551

原创 跨域问题:解决跨域的三种方案

当前端页面与后台运行在不同的服务器时,就必定会出现跨域这一问题,本篇简单介绍解决跨域的三种方案,部分代码截图如下,仅供参考:方式一:使用ajax的jsonp前端代码服务器代码使用该方式的缺点:请求方式只能是get请求方式二:使用jQuery的jsonp插件插件下载网址:https://github.com/jaubourg/jquery-jsonp前端代码服务器代码使用该方式的特点:与方式一相比,请求方式不只局限于get请求,还可以是post请求,但从服务器从获取的数据依然是jso

2020-09-30 15:29:06 493

原创 跨域问题的产生原因和相应的解决方式(与Cookie相关)

浏览器安全的基石是"同源政策"(same-origin policy)。很多开发者都知道这一点,但了解得不全面。本文详细介绍"同源政策"的各个方面,以及如何规避它。一、概述1.1 含义1995年,同源政策由 Netscape 公司引入浏览器。目前,所有浏览器都实行这个政策。最初,它的含义是指,A网页设置的 Cookie,B网页不能打开,除非这两个网页"同源"。所谓"同源"指的是"三个相同"。协议相同域名相同端口相同举例来说,http://www.example.com/dir/page

2020-09-29 17:28:49 559

原创 Cookie原理分析

一、案例分析——Cookie设置HttpOnly,Secure,Expire属性Tomcat版本为6.0.39,JDK版本为1.6update45在Web工程上增加一个Filter对Cookie进行处理public class CookieFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOExc

2020-09-29 10:51:37 211

原创 MySQL索引-B+树

索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。索引最形象的比喻就是图书的目录了。注意这里的大量,数据量大了索引才显得有意义,如果我想要在 [1,2,3,4] 中找到 4 这个数据,直接对全数据检索也很快,没有必要费力气建索引再去查找。索引在 MySQL 数据库中分三类:B+ 树索引Hash 索引全文索引我们今天要介绍的是工作开发中最常接触到的 InnoDB 存储引擎中的 B+ 树索引。要介绍 B+ 树索引,就不得不提二叉查找树,平衡二叉树和 B 树这三种数据结构。

2020-09-20 19:17:40 1248 1

原创 一篇文章搞定java中的垃圾回收机制面试题

一篇文章搞定java中的垃圾回收机制面试题提到java的垃圾回收机制就不得不提一个方法:​ System.gc()用于调用垃圾收集器,在调用时,垃圾收集器将运行以回收未使用的内存空间。它将尝试释放被丢弃对象占用的内存。 然而System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用。 所以System.gc()并不能说是完美主动进行了垃圾回收。System.gc()用于调用垃圾收集器,在调用时,垃圾收集器将运行以回收未使用的内存空间。它将尝试释放被丢弃对象占用的内存。 然而Sys

2020-08-27 17:42:32 189

原创 spring-boot启动时,指定spring.profiles.active

Maven启动指定Profile通过-P,如mvn spring-boot:run -Ptest但这是Maven的Profile。如果要指定spring-boot的spring.profiles.active,spring-boot 1.x 使用mvn spring-boot:run -Drun.profiles=test,spring-boot 2.x 使用mvn spring-boot:run -Dspring-boot.run.profiles=test。参考资料:https://docs

2020-07-11 20:31:14 29962

原创 使用 spring.profiles.active 及 @profile 注解 动态化配置内部及外部配置

引言:使用 spring.profiles.active 参数,搭配@Profile注解,可以实现不同环境下(开发、测试、生产)配置参数的切换一.根据springboot的配置文件命名约定,结合active可在不同环境引用不同的properties外部配置参考官方文档:根据文档描述,我们除application.properties外,还可以根据命名约定( 命名格式:application-{profile}.properties)来配置,如果active赋予的参数没有与使用该命名约定格式文件相匹配

2020-07-11 19:47:15 1855

原创 聚集索引和非聚集索引 简析与对比

聚集(clustered)索引,也叫聚簇索引定义:数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引。注:第一列的地址表示该行数据在磁盘中的物理地址,后面三列才是我们SQL里面用的表里的列,其中id是主键,建立了聚集索引。合上面的表格就可以理解这句话了吧:数据行的物理顺序与列值的顺序相同,如果我们查询id比较靠后的数据,那么这行数据的地址在磁盘中的物理地址也会比较靠后。而且由于物理排列方式与聚集索引的顺序相同,所以也就只能建立一个聚集索引了。聚集索引实际存放

2020-07-08 18:17:05 336

原创 ArrayList和LinkedList(常用方法、底层结构及扩容机制)

1.ArrayList解说ArrayList初始长度为0(这里以jdk1.8为例),是一个Object类型的空数组,如下当第一次调用add后,长度变为10当数组首次扩容的10个空间用完需要扩容后,会第二次走grow方法来扩容(每次扩容为1.5倍)总的来说:ArrayList初始大小为10,每次1.5倍进行扩容;它的底层是用数组实现的,所以查询速度相对LinkedList要快。ArrayList的扩容主要发生在向ArrayList集合中添加元素的时候。由add()方法的分析可知添

2020-07-04 18:22:28 2848

原创 CAP 定理的含义

分布式系统(distributed system)正变得越来越重要,大型网站几乎都是分布式的。分布式系统的最大难点,就是各个节点的状态如何同步。CAP 定理是这方面的基本定理,也是理解分布式系统的起点。本文介绍该定理。它其实很好懂,而且是显而易见的。下面的内容主要参考了 Michael Whittaker 的文章。一、分布式系统的三个指标1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标。ConsistencyAvailabilityPartition

2020-06-18 11:03:17 107

原创 什么是聚集索引和非聚集索引 ( 或者聚簇索引和非聚簇索引 )

1.什么是聚集索引和非聚集索引 ?(聚簇索引和非聚簇索引)聚集还是非聚集指的是B+Tree 叶结点存的是指针还是数据记录MyISAM索引和数据分离,使用的是非聚集索引InnoDB数据文件就是索引文件,主键索引就是聚集索引(1)MyISAM引擎 默认是非聚集索引图解:在叶结点里面存储的是指向数据的指针,如叶结点5中存储的0x6A,指针指向的数据的表文件也就是数据文件,这里索引文件和数据文件是两个文件,所以说它是非聚集的。① 非聚集索引文件存储方式CREATE TABLE myisam_tabl

2020-06-14 22:25:09 763

原创 红黑树结构分析

很早之前就想写一篇关于红黑树的文章,但是由于担心自己理解的不透彻,就一直不敢下笔。于是在重新看了很多篇文章和资料之后,决定彻彻底底的把红黑树搞清楚。也希望让你在面试中游刃有余。OK,废话不多说,开始今天的文章。整篇文章的思路是这样的,红黑树其实就是一种数据结构,设计它的目的就是为了高效地进行增删改查,所以我们文章的顺序也会按照这个思路来进行。我们先从二叉查找树逐渐引入到红黑树,然后再详细的讲解。你如果看过其他文章想必也一定清楚,红黑树比较麻烦,希望你有点耐心,认真理解每一张图再往下分析。一、二叉查找树

2020-06-14 13:22:55 160

原创 面试官这样问Java 线程池,我的回答让他竖起了大拇指!

前言这周我投递出了简历,岗位是java后端开发工程师。这周美团面试官给我进行了面试。面试过程中他问了线程池,今天详细讲一讲Java 线程池。线程池线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。start()创建一定数量的线程池,进行线程循环stop()停止所有线程循环,回收所有资源addTask()添加任务Excut...

2020-04-18 11:51:41 103

原创 2万字Java并发编程面试题合集(含答案,建议收藏)

Java 并发编程1、在 java 中守护线程和本地线程区别?2、线程与进程的区别?3、什么是多线程中的上下文切换?4、死锁与活锁的区别,死锁与饥饿的区别?5、Java 中用到的线程调度算法是什么?6、什么是线程组,为什么在 Java 中不推荐使用?7、为什么使用 Executor 框架?8、在 Java 中 Executor 和 Executors 的区别?9、如何在 Wind...

2020-04-18 11:16:37 109

原创 深入理解HashMap

摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。简介Java为数据结构中的映射定义了一个接口java.util.Map,...

2020-03-30 18:55:15 172 1

原创 12000字史上最最最完整深入解析JVM,收藏再看!

工作之余,总结一下JVM相关知识。Java运行时数据区:Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区域,如图:1、程序计数器:指向当前线程正在执行的字节码指令。线程私有的。2、...

2020-03-30 10:55:30 138

原创 java 中断线程的几种方式 interrupt()

中断中断(Interrupt)一个线程意味着在该线程完成任务之前停止其正在进行的一切,有效地中止其当前的操作。线程是死亡、还是等待新的任务或是继续运行至下一步,就取决于这个程序。虽然初次看来它可能显得简单,但是,你必须进行一些预警以实现期望的结果。你最好还是牢记以下的几点告诫。首先,忘掉Thread.stop方法。虽然它确实停止了一个正在运行的线程,然而,这种方法是不安全也是不受提倡的,这意味...

2019-12-26 11:16:24 254

原创 Java中interrupt的使用

通常我们会有这样的需求,即停止一个线程。在java的api中有stop、suspend等方法可以达到目的,但由于这些方法在使用上存在不安全性,会带来不好的副作用,不建议被使用。具体原因可以参考Why is Thread.stop deprecated。在本文中,将讨论中断在java中的使用。中断在java中主要有3个方法,interrupt(),isInterrupted()和interrup...

2019-12-26 10:00:53 81

原创 synchronize和Lock锁的区别

为什么java已经通过synchronized关键字实现同步访问了,还需要提供Lock?synchronized的缺陷前面博客有提到过释放对象的锁有两种情况:程序执行完同步代码块会释放代码块。程序在执行同步代码块是出现异常,JVM会自动释放锁去处理异常。如果获取锁的线程需要等待I/O或者调用了sleep()方法被阻塞了,但仍持有锁,其他线程只能干巴巴的等着,这样就会很影响程序效率。因此...

2019-12-23 15:07:54 190

原创 数字签名与数字加密的区别

软件设计师教程在讲加密技术和认证技术的时候,提到了数字签名和数字加密,两者还是有区别的,以下对两者的主要过程做一个简单介绍。预备知识对称加密:对称加密采用了对称密码编码技术,特点是文件加密和解密使用的相同的密钥,在密码学中称为对称加密法。常用的对称加密算法有:数据加密标准算法(Digital Encryption Standart, DES)、三重DES、RC-5、国际数据加密算法(Inte...

2019-12-23 09:52:26 2466

原创 一文读懂数字签名

数字签名:数字签名被认为是对手写签名的数字化模拟。手写签名的重要特征为:1、自己的签名只有自己可以制作;2、自己的签名可以由其他任何人验证有效性;3、自己的签名只对某一特定文件发生联系,不能用于支持其他文件;在说明数字签名之前,需要了解密码学的一些基本概念:明文:消息的初始形式密文:加密后的形式密钥:指某个用来完成 加密、 解密、完整性验证等密码学应用的秘密 信息。如果我们将明文...

2019-12-23 09:39:58 148

原创 数字签名是什么?

今天,我读到一篇好文章。它用图片通俗易懂地解释了,”数字签名”(digital signature)和”数字证书”(digital certificate)到底是什么。我对这些问题的理解,一直是模模糊糊的,很多细节搞不清楚。读完这篇文章后,发现思路一下子就理清了。为了加深记忆,我把文字和图片都翻译出来了。1.鲍勃有两把钥匙,一把是公钥,另一把是私钥。2.鲍勃把公钥送给他的朋友们—-帕蒂、道格...

2019-12-23 09:28:21 1309 2

原创 Token是什么?和session、cookie相比,使用场景有什么区别?

讲解一:在Web开发领域,相信大家对于Cookie和Session都很熟悉,Cookie和Session都是会话保持技术的解决方案。随着技术的发展,Token机制出现在我们面前,不过很多开发者对于Token和Cookie、Session的区别及使用场景分辨不清。Cookie和Session的用途要知道我们访问网站都是通过HTTP协议或HTTPS协议来完成的,HTTP协议它本身是无状态的协议(...

2019-12-20 15:01:21 2609 1

原创 64匹马,8个赛道,找出前4名最少比赛多少场?——最快10次,最慢11次;

64匹马,8个赛道,找出前4名最少比赛多少场? 答案原创,转载请注明出处:http://www.cnblogs.com/reanote/p/find_4th_in_64horse.html  第一步:全部马分8组,各跑一次,然后淘汰掉每组的后四名(8次); 第二步:取每组第一名进行一次比赛,然后淘汰最后四名所在组的所有马(1次):...

2019-12-20 14:40:03 164

原创 控制Nginx上传文件大小限制(请求报文过大)

在nginx使用过程中,上传文件的过程中,通常需要设置nginx报文大小限制。避免出现413 Request Entity Too Large。于是奇葩的问题被我们遇到了,详细配置请参考下面。我们的问题是,无论client_max_body_size设置在哪里,nginx -s reload后,依然一直报413.多次尝试reload,始终无效。最终决定kill 进程,restart,终于好了。...

2019-12-19 17:33:13 245

原创 nginx修改上传文件大小限制

自己搭的服务器,用nginx做代理。上传超过1M大的客户端文件无法正常上传,nginx直接报错,上传文件太大,于是修改了下nginx的配置,就可以了。按照网上所说的加上client_max_body_size 字段,怎么重启nginx都不行。后来发现放的位置有问题!server { listen 80; server_name localhost;...

2019-12-19 17:26:09 411

原创 Java 类加载机制(阿里)-何时初始化类

 (1)阿里的面试官问了两个问题,可以不可以自己写个String类答案:不可以,因为 根据类加载的双亲委派机制,会去加载父类,父类发现冲突了String就不再加载了;(2)能否在加载类的时候,对类的字节码进行修改答案:可以,使用Java探针技术,可以参考:Java探针-Java Agent技术-阿里面试题阅读目录   什么是类加载器&nbsp...

2019-12-19 16:12:10 81

原创 JVM的垃圾回收机制 总结(垃圾收集、回收算法、垃圾回收器)

如果想了解Java内存模型参考:jvm内存模型-和内存分配以及jdk、jre、jvm是什么关系(阿里,美团,京东)相信和小编一样的程序猿们在日常工作或面试当中经常会遇到JVM的垃圾回收问题,有没有在夜深人静的时候详细捋一捋JVM垃圾回收机制中的知识点呢?没时间捋也没关系,因为小编接下来会给你捋一捋。一、 技术背景你要了解吧二、 哪些内存需要回收?2.1 引用计数算法2.1...

2019-12-19 14:14:52 78

原创 Tomcat服务器优化------使用visualvm性能监控

目录使用visualvm性能监控  由于Tomcat的运行依赖于JVM,从虚拟机的角度我们把Tomcat的调整分为外部环境调优和自身调优两类来描述。1、JDK内存优化   根据服务器物理内容情况配置相关参数优化tomcat性能。当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此一般建议堆的最大值设置为可用内存...

2019-12-19 11:03:04 197

原创 spring的bean在什么时候被实例化

Spring什么时候实例化bean,首先要分2种情况第一:如果你使用BeanFactory作为Spring Bean的工厂类,则所有的bean都是在第一次使用该Bean的时候实例化第二:如果你使用ApplicationContext作为Spring Bean的工厂类,则又分为以下几种情况:(1):如果bean的scope是singleton的,并且lazy-init为false(默认是fal...

2019-12-18 17:34:07 496

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除