自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 资源 (1)
  • 收藏
  • 关注

原创 redis 实际应用中的缓存作用

有人说互联网用户是用脚投票的,这句话其实也从侧面说明了,用户体验是多么的重要;这就要求在软件架构设计时,不但要注重可靠性、安全性、可扩展性以及可维护性等等的一些指标,更要注重用户的体验,用户体验分很多方面,但是有一点非常重要就是对用户操作的响应一定要快;怎样提高用户访问的响应速度,这就是摆在架构设计中必须要解决的问题;说道提高服务的响应速度就不得不说缓存了;从系统的层面说,CPU的速度远远

2017-11-08 11:15:06 16444

原创 了解Synchronzied原理一篇就够了!

这里写自定义目录标题原理底层原理monitor监视器锁什么是monitor?synchronized 加锁方式原理synchronized 内置锁是一种对象所,作用力度是对象,可以用来实现对临街资源的同步互斥访问,可重入;加锁方式:- 同步实例方法,锁得是当前实例对象;- 同步类方法,所得是当前类对象;- 同步代码块,所得是括号里的对象;底层原理synchronized是基于JVM内置锁实现,通过内部对象Monitor(监视器锁)实现,基于进入与退出Monitor对象实现方法与代码 块同步,

2021-10-18 21:50:04 466

原创 mysql去掉特殊字符

现象从文本中导入mysql,查询不到指定的数据实际有数据发现红色框直接换行了,说明有不可见特殊字符执行替换sql,如下://9 水平制表符;10 换行符;13 回车符号update qea set ip = replace(replace(replace(ip,char(9),''),char(10),''),char(13),'');可以查到了,红色区域的换行符也没有了...

2021-10-15 16:01:45 1032

原创 spring源码-aop解析

spring aop 是通过动态代理实现的,具体是如何实现的那?spring通过一个切面类,在他类上加入了@Aspect注解,定义一个pointCut方法,最后定义一系列的增强方法。这样就完成了一个对象的切面操作。基本的思路是1.找到所有的切面类2.解析出所有的advice并保存3.创建一个动态代理类4.调用被代理类方法时,找到所有的增强器,并增强当前方法切面解析spring通过@EnableAspectJAutoProxy开启aop切面,在注解上面发现@Import(AspectAutoPr

2021-10-12 17:13:05 276

原创 深入理解java动态代理

AOP,Aspectj,Spring AOP 前世今生AOP 是要实现在我们原来写的代码的基础上,进行一定的包装,如方法执行前,方法返回后,方法跑出异常后等地方进行一定的拦截处理或者叫增强处理。AOP 的实现并不是因为java提供了什么神奇的狗子,可以把方法的几个生命周期告诉我们,而是我们要实现一个代理,实际运行的实例是生成的代理类的实例。动态代理。默认如果使用接口,用JDK动态代理,如果没有接口,使用CGLIB实现。Spring 3.2 以后,spring-core直接把CGLIB和ASM的源码

2021-10-08 23:52:41 252

原创 idea中spring-5.2.11源码搭建

环境准备jdk1.8.0spring-framework-5.2.11.RELEASE 下载地址 https://github.com/spring-projects/spring-framework (注意下载版本,不需要下载最新的;gradle v5.6.4 下载地址 https://gradle.org/releases/修改镜像将spring工程下的build.gradle配置如下repositories { maven{ url 'https://maven.aliyu

2021-09-25 20:02:20 209 1

转载 tomcat源码解析-container

在tomcat中,容器主要分为四种,engine,host,context,wrapper。在详细分析tomcat源码之前,我们先来看看容器的类继承层级是怎样的。这里,我们先说明一下容器的包含关系。engine包含多个host,host包含多个context,context包含多个wrapper,每个wrapper对应一个servlet。engine,我们可以看成是容器对外提供功能的入口,每个Engine是Host的集合,用于管理各个Host。Host,我们可以看成虚拟主机,一个tomcat可以支

2021-09-17 22:17:14 265

原创 tomcat源码分析-pipeline管道机制

本文主要目的是讲解tomcat中的pipeline机制我们前面文章介绍过,tomcat中container有四种,分别是engine,host,context,wrapper,这4个。container的实现类分别是StandardEngine,StandardHost,StandardContext,StandardWrapper。四个容器是包含关系,engine包含host,host包含context,context,包含wrapper,wappper代表最基础的一个servlet。tomcat

2021-09-12 20:37:13 543

原创 tomcat源码-engine及standardEngine实现

我们看下engine,引擎的执行server.xml如下engine下包含了host节点 <Engine name="Catalina" defaultHost="localhost"> <!--For clustering, please take a look at documentation at: /docs/cluster-howto.html (simple how to) /docs/config/clust

2021-09-12 14:24:42 223

原创 tomcat源码分析-executor及其实现StandardThreadExecutor

executorexecutor 是引擎,用户请求是经过executor进行处理的,知觉告诉我们这应该是一个多线程,线程池的容器,我们先从类的关系看下;public interface Executor extends java.util.concurrent.Executor, Lifecycle { public String getName(); @Deprecated void execute(Runnable command, long timeout, TimeU

2021-09-11 01:09:09 525

原创 tomcat源码分析-service及standardService分析

前面已经知道,server下可以包含多个service,整体类的继承结构

2021-09-09 00:22:55 242

原创 tomcat源码分析-server原理及其实现standardServer

理解思路继承结构我们要从高一点的维度去理解Server的结构设计,我们看下server对应的server.xml<?xml version="1.0" encoding="UTF-8"?>//这里端口8005负责监听tomcat的关闭请求<Server port="8005" shutdown="SHUTDOWN">//监听器相关 <Listener className="org.apache.catalina.startup.VersionLoggerL

2021-09-07 00:18:40 322

原创 tomcat源码分析-bootstrap和catalina启动

Tomcat架构图网上提供了的Tomcat成熟的架构图,感觉比较形象和全面贴出来看下。启动我们看下整体的初始化和启动的流程,在理解的时候可以直接和Tomcat架构设计中组件关联上:这里涉及的组件有:...

2021-09-06 00:25:18 291 1

原创 Tomcat架构以及生命周期和事件监听

讲一下tomcat的架构和生命周期和事件监听机制,因为东西很多,会在后面的tomcat源码中阐述;Tomcat结构Tomcat 生命周期tomcat架构是一种树状的层级管理结构,组件会有自己的父节点,也可以有自己的孩子节点,每个节点都是组件,每个组件都有生命周期,为了管理方便,子节点的生命周期交给父节点来管理。每个组件的生命周期的管理主要是由接口org.apache.catalina.Lifecycle和一个枚举org.apache.catalina.LifecycleState来表示。Lif

2021-09-04 20:14:18 445 1

原创 tomcat中http和socket关系

我们知道http协议是建立再socket之上的。1.在web领域,常见的场景是浏览器发送请求到服务器;在每次请求时都是断开服务器连接,第一次请求时,客户端浏览器会发送close,则tomcat会立即关掉socket;如果每次请求不是断开服务器连接,那么请求时发送keep-alive,则tomcat不会立即关掉socket;...

2021-09-04 16:18:15 895

原创 tomcat中的类加载器和安全机制

类加载器java中的类并不是一次加载完成的,而是按需加载。类加载器是用于加载java类到java虚拟机中的组件,它负责读取java字节码,并转换成 java.lang.Class 的一个实例,使字节码.class文件可以运行。一般类加载器负责根据一个指定的类找到对应的字节码,然后根据这些字节码定义一个java类。另外,它还可以加载资源,包括图像文件和配置文件。类加载器可以使java类动态地加载到jvm中并运行,即可在程序运行时再加载类,提供了很灵活的动态加载方式。启动类加载器(Bootstrap C

2021-09-03 00:07:50 380 1

原创 maven打包跳过pmd和单元测试

java8 工作中lomda表达式操作集合

2021-08-25 09:36:40 2815

原创 grpc-java代码实战

目录环境搭建一元流服务端流客户端流双向流二级目录三级目录环境搭建通过maven引入grpc相关包 <dependencies> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>3.9

2021-08-23 09:46:47 616

原创 grpc原理及四种实现方式

文章目录1. 概述2. grpc3. 使用API4. 服务定义5. 同步与异步6. 一元 RPC7. 服务器流 RPC8. 客户流 RPC9. 双向流 RPC10. 截止日期/超时11. RPC 终止12. 取消 RPC1. 概述RPC(Remote Procedure Call)-远程过程调用,他是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC采用客户端/服务器模式。请求程序就是一个客户端,而服务提供程序就是一个服务器。首先,客户端调用进程发送一个有进程参数的调用信息

2021-08-20 00:13:18 10738 1

原创 nacos2.0-源码分析-事件机制分析

##前言nacos的事件机制是异步的,心跳状态变化,服务状态变化都是通过事件机制传递的。发布者发送事件,订阅者订阅事件,并执行逻辑。1. 事件(Event)事件包括常规事件和慢事件,都是虚函数。1.1 常规事件(SlowEvent)public abstract class Event implements Serializable { //注释1.0 private static final AtomicLong SEQUENCE = new AtomicLong(0); pr

2021-08-16 22:51:08 1785

原创 nacos-naming 模块日志设计实现及思想

nacos作为注册中心,naming模块是其实现的主要位置,这里发现其日志实现比较有特色,简单讲一下。一.日志类模块位置如下:不同的模块使用不通的日志路径做区分,直接上代码,public class Loggers { public static final Logger PUSH = LoggerFactory.getLogger("com.alibaba.nacos.naming.push"); public static final Logger CHECK_RT = Lo

2021-08-05 10:40:16 1102

原创 排序算法汇总

1.选择排序 //选择排序 static void chooseSort(int [] data) { for (int i=0;i<data.length-1;i++) { int smallIndex = i; for (int j=i+1 ;j<data.length;j++) {// 0-i 已经排好,从i+1开始排序 if (data[i]>data[j]) {

2021-03-16 14:06:13 118

原创 ThreadLocal理解

ThreadLocal1.threadLocal与synchronize区分2.例子3.扩展1.threadLocal与synchronize区分 ThreadLocal主要解决多线程并发访问的问题。所采用的方式是线程间数据隔离。Synchronize是利用的锁机制,使变量或代码块再某一时刻只能有一个线程访问。ThreadLocal为每个线程都提供了变量的副本,使得每个线程在某个时刻访问到的并不不是一个对象,这样就隔离了多个线程对数据的数据共享,而synchronized却正好相反,它用于在多个线程间通

2020-10-18 20:42:13 127

原创 Mysql通过a表内容更新b表数据

这Mysql通过a表内容更新b表数据里写自定义目录标题有时候需要根据一个表的内容,更新另一个表的内容。当然我们知道大部分情形下,两个表是有关联的。下面的sql是将a表中年龄,更新到b表中。前提是a表的名字和b表的名字匹配。 update a set a.age = (select b.age from b where a.name = b.name and b.name is not null and b.name !="");...

2020-08-29 15:10:18 5009 2

转载 微服务的缺陷和应用

微服务是近几年非常火热的架构设计理念,我们需要正确理解微服务,否则如果只是跟风拿来就用,既不会用,也用不好,用了不但没有效果,反而还可能有副作用。今天我们就来深入理解微服务,如何避开陷阱,设计一个成功的微服务架构一. 微服务缺陷1.服务划分过细,服务间关系复杂服务划分过细,单个服务的复杂度确实下降了,但整个系统的复杂度却上升了,因为微服务将系统内的复杂度转移为系统间的复杂度了。从理...

2018-10-07 20:55:12 3194

原创 volatile 作用简单总结

volatile 作用:1:保证可见性;2:防止指令重排 ;3:一定的原子性1:共享元素的改变,直接写回主存中,同时通知其余线程刷新缓存,读取最新的值,防止脏读;2:对于没有依赖的指令,jvm会进行指令重排,有可能使程序失效;3.原子性(保证一定的原子性),可以保证对于double 的操作,是原子性的,不会在程序对其进行操作的时候,被打断,造成脏读;至于保证一定的原子性  而言,主要是针对long...

2018-07-15 14:42:07 825

原创 海量数据下 BitMap 理解及应用场景

1 .问题引入     在给定的一台4G的PC机器上实现,一个包含40亿个不重复并且没有排过序的无符号的int整数,给出一个整数,找出给定的某个数 m,是否在文件40亿个数据当中的需求。  需求分析:Int类型在Java中的存储占用4个Byte,32Bit,如果在内存中定义40亿个int类型数组来读取文件,占用大小:(40*100000000*4/1024/1024/1024)G=14.901G。...

2018-07-06 17:41:02 5873 5

原创 java 实现二叉树

二叉树遍历-JAVA实现二叉树遍历分为前序、中序、后序递归和非递归遍历、还有层序遍历。 1 //二叉树节点 2 public class BinaryTreeNode { 3 private int data; 4 private BinaryTreeNode left; 5 private BinaryTreeNode right; 6 7 ...

2018-06-22 21:54:02 374

原创 理论+实践轻松掌握nohup java -jar xxxx.jar >/dev/null 2>&1 & 意义

前言相信大家经常能在shell脚本中发现&gt;/dev/null 2&gt;&amp;1这样的语句。以前的我并没有去深入地理解这段命令的作用,照搬照用,直到上周我将这段命令不小心写成了2&gt;&amp;1 &gt;/dev/null,出了一点小问题之后,我才开始去了解这段命令背后的“玄机”。shell重定向介绍就像我们平时写的程序一样,一段程序会处理外部的输入,然后将运算结果输出到指定的位置。...

2018-06-11 22:35:53 8913 1

转载 基于Spark、NoSQL实时数据处理实践

本文基于TalkingData 张学敏 在公司内部KOL的分享主题《基于Spark、NoSQL实时数据处理实践》的整理,同时也在DTCC大会上做了同主题的分享。主要介绍了项目的技术选型、技术架构,重点介绍下项目面临的挑战和解决办法,还介绍了面对多维度、多值、多版本等业务场景时,使用Bitmap与HBase特性解决问题方法。共分为上下两篇,本次发布上篇,下篇敬请关注。一、数据相关情况打开百度App,...

2018-06-01 09:39:26 1918

转载 行存储和列存储的区别及各自的应用场景

一、定义行式存储把一行中的数据值串在一起存储起来,然后再存储下一行的数据,以此类推列式存储把一列中的数据值串在一起存储起来,然后再存储下一列的数据,以此类推二、例子1数据库以行、列的二维表的形式表示数据,但是却以一维字符串的方式存储,举个例子上面的表包括 Empid,Lastname、Firstname,Salary 四个字段。数据库会把这个表存储在一系列的一维字节中,由操作系统将这一系列的字节写...

2018-05-27 21:16:08 7096 1

转载 hadoop/hive/hbase 简单区别及应用场景

1、hadoop:它是一个分布式计算+分布式文件系统,前者其实就是MapReduce,后者是HDFS。后者可以独立运行,前者可以选择性使用,也可以不使用2、hive:通俗的说是一个数据仓库,仓库中的数据是被hdfs管理的数据文件,它支持类似sql语句的功能,你可以通过该语句完成分布式环境下的计算功能,hive会把语句转换成MapReduce,然后交给hadoop执行。这里的计算,仅限于查找和分析,...

2018-05-12 21:58:08 8122 4

原创 ubuntu16.04出现无法下载 http://ppa.launchpad.net/pyside/ppa/ubuntu/dists/xenial/main/binary-amd64/Packages

现象如下:一:cd /etc/apt/sources.list.d二:mv pyside-ubuntu-ppa-xenial.list pyside-ubuntu-ppa-xenial.list.bak1三:测试一下 sudo apt-get install git

2018-05-06 10:45:01 4658 1

转载 入门级理解kafka 一篇文章就够了

Kafka的基本介绍Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。主要应用场景是:日志收集系统和消息系统。Kafka主要设计目标如下:以时间复杂度为O(1)的方...

2018-04-28 17:26:20 1523

转载 500字领略ElasticSearch等搜索引擎的倒排索引原理

首先我们来看下,我们平时在搜索框输入关键词,下面展示出来的搜索结果页是怎么来的。废话不多说,我们先来看一个例子:(在百度搜索框中输入“精美散文”)嗯,很好。没有出现百度的广告。平心而论,看到这个搜索结果列表页相信搜索这个关键词的用户还是应该会比较满意的。我们再进一步查看一下这张图的信息:百度为您找到相关结果约14200000个;列表页飘红的词均出现在搜索框中,唯一让人意外的是百度搜索后台对“文章”...

2018-04-24 17:09:12 361

原创 解决ElasticSearch找不到JDK问题(Could not find any executable java binary.Please install java in your PATH)

背景:    本地启动ElasticSearch服务提示找不到JDK或JRE,提示Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME.     但是本地已经安装了jdk,并且已经配置了环境变量,但是为什么还是有问题,答案是不要把环境变量设置到bin目录。解决方案: ...

2018-04-19 16:23:27 10182 1

原创 300字搞懂mysql数据库优化方案方向

优化时机:         一般单表超过500万左右,或明显感觉到性能下降时,需要优化.。优化方案:     1.添加索引      2.读写分离      3.使用缓存,如Memcached 或Redis 等      4.使用搜索引擎,如ElasticSearch 或Solr 等      5.分库分表详细说明:    1.索引这步是第一步就去做的事情,在建表的时候,就要去考虑索引的事情,加索...

2018-04-11 14:37:03 452

转载 三分钟看懂redis缓存在实战中的应用

一、Redis常见问题       我自己画了个图,参考如下:             常见的缓存问题如下四类:        0.缓存一致性        1.缓存并发        2.缓存雪崩        3.缓存击穿       (描述顺序,和我的图逆序了,为了强调3个问题的递进关系)       0)缓

2018-02-03 19:53:32 970

原创 java多线程之callable+Executor线程池实例

package main.java;import java.sql.Time;import java.util.ArrayList;import java.util.List;import java.util.Random;import java.util.concurrent.Callable;import java.util.concurrent.Cancell

2018-01-19 22:43:37 911

原创 Java垃圾回收总结

在学习GC之前,你首先应该记住一个单词:“stop-the-world”。Stop-the-world会在任何一种GC算法中发生。Stop-the-world意味着 JVM 因为要执行GC而停止了应用程序的执行。当Stop-the-world发生时,除了GC所需的线程以外,所有线程都处于等待状态,直到GC任务完成。GC优化很多时候就是指减少Stop-the-world发生的时间。垃圾回收常用的算法

2018-01-18 19:30:26 254

空空如也

空空如也

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

TA关注的人

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