自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(128)
  • 资源 (16)
  • 收藏
  • 关注

原创 java进阶(10)——SocketException:Connetion reset

连接重置意味着收到了TCP RST。TCP RST包是指server端告诉你发送前一个TCP包的连接不被识别,可能连接已经关闭,可能端口没有打开,诸如此类。一个重置包就是没有有效负载并且在TCP报头标志中设置了RST位的包。出现这个Connetion reset报错,主要有以下几种情况:server端已经正常关闭;server端发送了一个Reset包给到client端,可能是连接中断,或者是端口关闭;TCP(传输控制协议)套接字被关闭,因为套接字收到了来自server端的关闭命令;另一端故意重置

2021-08-10 19:22:37 807

原创 java进阶(9)——JVM jar包加载顺序

最近工作当中遇到过好几例,由于项目当中依赖了一些框架,而这些框架无法直接修改时,我就直接本地代码写了一个同名同包路径的类,可以直接覆盖框架的类(本文说的框架类,不包括jdk的),屡试不爽。但是心里不免有疑问,为啥我本地写的同名同路径的类,可以覆盖三方框架的类呢?如果我依赖了jarA和jarB,俩jar包有一个同名同路径的类,那JVM会加载哪一个类呢?听同事说过,他们之前遇到过一同名同路径的类问题,测试环境和生产环境加载jar包的顺序不一样,导致出现线上事故。有这些疑问,心里也比较慌,所以特意花了些时间研究了

2021-07-25 11:21:35 8038 2

原创 Java并发系列(2)——多线程顺序打印ABC

直接输出两种多线程顺序打印ABC的实现方式。基于synchronizedprivate static final Object object = new Object();public static void main(String[] args) throws InterruptedException { printABCBySynchronized();}private static void printABCBySynchronized() throws InterruptedExc

2021-01-02 21:31:14 460

原创 Java并发系列(1)——线程状态/生命周期

本文主要讲线程在基于synchronized关键字,以及调用Thread类各个方法,各种情况下的一些状态。线程有哪些状态?在Thread类中有一个枚举State,描述线程的6个状态:public enum State { NEW, RUNNABLE, WAITING, TIMED_WAITING, BLOCKED, TERMINATED}线程状态是如何改变的?这里结合synchronized关键字,写的一个例子:public static void main(String[] a

2021-01-01 20:54:34 300

原创 SpringCloud系列——Eureka平滑发布实战

为何需要平滑发布在使用eureka作为服务注册中心,应用之间通过FeignClient调用时,正常情况下,被调用方在发布时,调用方是有短暂时间调用不到服务的,提示报错: No route to Host。针对这种情况,需要实现eureka的平滑发布功能。其实,也就是实现点火,熄火接口。springboot1.5+的实现配置文件配置eureka.instance.initialStatus=OUT_OF_SERVICEmanagement.health.eureka.enabled=falsema

2020-12-17 20:36:19 1122

原创 SpringCloud系列——Eureka注解式启动剖析

server端/client端概览本文主要是围绕这张图来讲解!server端添加依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>client端添加依赖 <dependen

2020-10-09 13:29:54 617

原创 SpringCloud系列——EurekaServer集群注册表同步流程深入剖析

一般在生产环境,我们的Eureka服务注册中心,为了高可用,都是以集群的形式存在的,那集群各节点之间是怎么同步注册表的呢?废话不多说,首先还是以一张完整流程图来开端:流程图解简单来说,分为以下几个步骤:Eureka客户端会向Eureka集群其中一个节点推送应用实例注册/发送心跳/下线/更改状态这些数据节点首先会将数据放到任务分发器中,任务分发器中管理着任务执行器和接收执行器接收执行器有一个处理数据的队列,队列中的数据是...

2020-10-06 14:24:45 622

原创 SpringCloud系列——EurekaServer注册表更新机制

PS:本篇源码涉及到的类,都是在原生的netflix-eureka中。Eureka注册表简单介绍eureka中注册表是一个非常重要的概念,其实可以这么理解,不管是EurekaClient端还是EurekaServer端,都有一个map这样的数据结构,来存储应用的实例信息。比如,应用order-api要通过eureka方式访问user-api时,是从order-api本地的EurekaClient注册表里根据user-api(即clientName)来选择应用实例的地址,并请求数据,具体流程如图所示:

2020-09-23 10:23:04 1191 4

原创 SpringCloud系列——Feign+Ribbon配置实战篇

一般情况下,Feign和Ribbon我们都是结合使用的。Feign是网络请求客户端,Ribbon用于Eureka的负载均衡。下面我总结了下平时使用Feign和Ribbon的一些常用配置。连接超时和读取超时设置这俩参数的配置,网上找了很多帖子,也没说出个所以然来。笔者去看Feign和Ribbon的源码时,发现各种参数配置类,入口很深,极其蛋疼恶心。默认配置默认配置入口//RibbonClientConfiguration.java@Bean@ConditionalOnMissingBeanpu

2020-09-15 19:46:07 3224 3

原创 SpringCloud系列——EurekaClient注册表更新机制

Eureka注册表整体框架图:Eureka客户端更新机制图解还是直接看图来得实在:这个注册表中含有所有服务的信息,比如服务的IP,端口,实例状态等,在这个商城项目中,用户在浏览商品之后,想买此商品,这时商品服务会去调用订单服务,而获取订单服务的IP和端口就是由Eureka注册中心中的注册表维护着的。DiscoveryClient类解析DiscoveryClient是Eureka客户端向Erueka服务端获取注册表/注册/发送心跳的具体实现类,可以说是我们跟Eureka客户端打交道最多的一个类了。

2020-09-07 20:30:07 1055

原创 SpringCloud系列——Eureka中Region和Zone概念介绍

Region和Zone概念简介这里顺便解释下Eureka中的两个概念Region和Zone,Region可理解为是地理上的分区,比如北京,上海这种,Zone可理解为上海下面的机房,看图会更清晰些:配置region和zone的属性参数是:# 生产环境一般是配置eureka集群或者短域名方式eureka.client.service-url.defaultZone=http://localhost:9000/eureka# 生产环境一般不会配置此参数eureka.client.region=myR

2020-09-02 00:16:02 2417

原创 java进阶(8)之阿里云 安装单机版rocketmq并躺坑

PS: 本人是阿里云服务器裸机实践安装准备安装jdk下载选择合适的jdk版本进行下载,我是选择的清华大学开源软件镜像站,oracle官网还得账号登录才能下载,比较麻烦,我选择的是jdk1.8:wget https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/8/jdk/x64/linux/OpenJDK8U-jdk_x64_linux_open...

2020-03-29 10:12:32 652 1

原创 Java进阶(7)之mac 安装rocketmq以及与springboot结合使用

安装RocketMQ Server下载bin压缩包在 rocketmq官网中下载最新bin压缩文件(当前最新版本是4.7.0)环境配置在.bash_profile文件中添加环境变量:export ROCKETMQ_HOME=/yourPath/rocketmq-all-4.7.0-bin-release启动路由cd到rocketmq-all-4.7.0-bin-release目录下...

2020-03-24 20:18:09 708 1

原创 java进阶(6)之从硬件底层剖析synchronized/volatile原理

已知:java中的synchronized关键字能保证可见性,有序性,原子性;volatile关键字能保证可见性,有序性。问题:为什么java中的并发,在硬件层面不能保证,非要在JVM里处理呢?它们在硬件层面是如何对应保证的呢?java层面为啥要加这两个关键字才能保证java的并发特性呢?指令重排序无法保证有序性java中的一行行代码,对应到硬件层面,就是一个个指令,现代处...

2020-03-02 10:41:26 667

原创 java进阶(5)之ReentranctLock/AQS等并发原理解析

PS: AQS全称AbstractQueueSynchronizer,抽象队列同步器,是并发中最核心的一个类了,本篇文章不剖析源码,只用文字和图形表达。AQS解析以及与ReentranctLock之间的关系通过看源码可知,ReentranctLock关于锁的操作,都是基于AQS的。AQS中有两个核心的属性,状态变量state和双向链表head和tail。state用于保存当前是否有锁以及...

2020-02-24 16:20:40 723

原创 mysql数据库(1)之性能压测

我是用mac本地测试的,linux环境大致相同。数据库的性能压测,不单单一味追求qps/tps,还要看CPU和内存使用情况。QPS/TPS压测工具sysbench安装sysbench使用brew命令安装sysbenchbrew install sysbench查看sysbench安装版本,确保安装OKsysbench --version预执行命令sysbench --db-dr...

2020-02-04 15:28:14 1431

原创 java进阶(4)之volatile关键字深入详解

volatile作用可见性当有多个线程共用一个变量,有线程读,有线程写,那么就有可能导致有的线程无法及时读取到另外线程修改后的变量的值。volatile关键字可以让其他线程立即看到变量的最新值。有序性终端设备为了加快运行速度,会让编译器和处理器进行指令重排序,有可能会导致上下两句代码的执行顺序不一致。volatile关键字看可以禁止指令重排序,保证代码语句按顺序执行。CPU多级缓存模型...

2020-02-03 17:12:03 341

原创 java进阶(3)之Eureka注册中心原理以及性能调优

图解原理看图说明:1. 应用server的服务实例一上线,就会将自己注册到Eureka Server的注册表中;2. 服务注册表一旦检测到有更新,就会将实例同步到读写缓存表;3. 读写缓存表每隔30s,就会将实例信息同步给读缓存表;4. 应用Client的服务,每隔30s,就会去Eureka Server的读缓存拉取所有的服务实例,这时候通信已经建立起来;5. 服务注册表每隔60s,...

2019-11-16 10:13:26 1088

原创 java 图片url以form-data方式上传

之所以想记录下来,主要是之前对这个不太熟,然后在网上找了大半天也没找到合适的,然后自己慢慢试了出来,比较囧。。。但分享给大家,亲测可用!主要分为两步:1. 将图片url转为二进制字符串;2. 将二进制字符串以及其他字段一并上传。直接上代码:public class HttpClient { public static final OkHttpClient client = ...

2019-11-05 17:20:05 2365 1

原创 java进阶(2)之Eureka集群配置以及Ribbon负载均衡浅析

本文是基于上一篇Euraka和Feign的结合使用来的,请先看下上一篇的内容。Eureka集群配置先对eureka-feign进行build,生成jar包然后在命令行的两个窗口分别执行:java12 -Dserver.port=8761 -Deureka.instance.hostname=peer1 -Deureka.server.responseCacheUpdateIntervalM...

2019-10-08 15:14:18 414

原创 java进阶(1)之Euraka和Feign的结合使用

PS: 本篇博客只讲具体使用,原理源码后续博客再讲。博客源码地址在这里: https://gitee.com/dafeige/java_advanced项目结构如图,euraka-feign是euraka服务注册中心,eureka-feign-server是feign服务端,eureka-feign-client是feign客户端。euraka-feign配置pom.xml中添加依赖...

2019-09-15 17:34:15 709

原创 Django系列(3)-统一封装Response消息体

亲测,直接拷贝我代码用就好,有问题请留言~定义常见code# 响应成功,状态码200CODE_SUCCESS = '000000'MSG_SUCCESS = '成功'# token失效或权限认证错误,状态码401CODE_AUTH_ERROR = '000001'MSG_AUTH_ERROR = 'token认证失败, 请重新登录'# 业务上的错误CODE_BUSSINESS_E...

2019-07-25 10:47:02 4927 1

原创 Django系列(2)-设置token失效时间

PS: 本篇中的token,指的是rest_framework的token。新建token.py,比较token时间戳import datetimefrom rest_framework.authentication import TokenAuthentication, get_authorization_headerfrom rest_framework.exceptions impo...

2019-07-24 20:43:30 6045

原创 Django系列(1)-自动化生成API文档

PS: 个人深感python开发者社区氛围比安卓/ios/java差多了。不过,这也许是个机会~前提: 本人开发环境是mac10.14.4,Python3.7.2django-rest-swagger vs drf-yasg百度google各种查询帖子,python中生成自动化API文档绝大部分用的都是django-rest-swagger库,然而此库作者表示在2019-06-04已停止更新...

2019-07-22 16:17:22 2052

原创 EasyRouter源码解析---仿Arouter路由的简洁版

为什么市面上由如Arouter这样优秀的路由框架了,还要自己去手写路由框架呢?Arouter框架大而全,会比较臃肿,很多功能其实我们并不需要,我们完全定制属于自己的路由;路由框架中有很多知识点需要我们综合运用,比如AutoService,Javapoet,注解,反射;对路由框架源码有更清晰的认识和理解。之前在项目中用ARouter比较多,看了ARouter的源码,也是似懂非懂,过了一段...

2019-06-27 17:28:44 712

原创 JQuery中$()函数的7种用法总结

前言最近项目中需要用到jQuery,而jQuery中最重要的概念应该就是这个$符号了,特意总结了下$()函数的几种用法。jQuery对象是一个类数组的对象,含有连续的整形属性以及一系列的jQuery方法。它把所有的操作都包装在一个jQuery()函数中,形成了统一(也是惟一)的操作入口。其中我们用的非常频繁的一个函数是$()或者说是jQuery(),当我们调用他的时候会根据传入的参数的不同而达...

2019-04-15 17:44:36 1583

原创 安卓进阶(13)之离奇bug

PS:此贴会持续更新,记录我平时遇到的比较坑爹的bugLoaderManager.LoaderCallbacks前提: 数据源从始至终都没有变化!问题: 当我的compileSdkVersion为27及以下时,onLoadFinished()只会调用一次,但是当我的compileSdkVersion为28时,从其他页面返回到已实现LoaderManager.LoaderCallbacks接口...

2019-03-08 12:05:22 233

原创 安卓进阶(12)之自定义数字键盘

想要源码的请戳这里:源码地址实现效果实现原理概括:数字键盘View用Popuwindow来呈现,通过监听Activity/Dialog中Window的decorView焦点改变事件,以及EditText中的tag属性,来动态显示自定义的数字键盘。在Dialog中弹出自定义数字键盘,需要动态更新数字键盘的位置,和宽度。初始化数字键盘设置数字键盘的宽高,并监听焦点变化:private v...

2019-01-30 15:05:56 803

原创 ArrayList 原理解析

PS: 前阵子面试,被问到ArrayList的原理,我是一脸懵逼。ArrayList是我们在java语言当中,最常用的一个容器类了。我只知道ArrayList是基于数组的,但是让我说明白ArrayList的原理,当时还真没说出来,所以赶紧补了下,写个帖子(主要讲构造函数,添加对象,删除对象,查询对象)。构造函数ArrayList有三个构造函数:设置初始大小的构造函数;默认缺省初始大小的构...

2018-11-27 17:43:30 406

原创 安卓进阶(11)之UI适配解决方案

博客内容有些UI设计师给到我们的设计图的宽的单位是px(比如1080*1920),有的给到我们的的单位是dp(比如360dp),我们没法保证设计师到底给出哪一种,而且,给到我们的设计图的尺寸,我们除了适配常规的尺寸,还得适配非常规的手机分辨率。那具体我们应该怎么去做适配呢?看了几篇帖子,都是人家用过非常成熟的,适用场景比较多的方案了。我自己总结了下,分为两种解决方案,一种是单位以px为参照物,...

2018-10-24 14:32:40 819

原创 安卓进阶(10)之OkHttp3.10连接层原理解析

参考文章OkHttp3源码解读四:连接层TCP连接与OKHTTP复用连接池

2018-10-22 19:39:30 442

原创 安卓进阶(9)之各种排序算法

目前在看排序算法有:冒泡排序,选择排序,插入排序,快速排序,归并排序。后面两种有递归操作,还没完成理解,先打个样,后面有时间再来琢磨~冒泡排序算法public class BubbleSort { static final String TAG = "BubbleSort"; public static void sort(int[] array){ bo...

2018-10-19 10:22:58 568 1

原创 安卓进阶(8)之Okhttp3.10缓存层原理分析

博客流程用一个demo展示Okhttp如何对接口数据进行缓存;讲解Okhttp数据缓存的流程以及原理。demo示例设置接口数据缓存可以有两种方式,一种是添加拦截器,另外一种是直接在Request.Builder类中设置cacheControl:OkHttpClient client = new OkHttpClient.Builder() //添加本地拦截器 .a...

2018-10-18 13:57:36 528

原创 安卓进阶(7)之OkHttp3.10拦截器原理解析

博客流程用一个demo介绍如何添加自定义的拦截器;介绍拦截器是怎么产生拦截效果的;介绍okhttp里自带的各个拦截器的原理。添加自定义的log拦截器在使用okhttp时,我们可能需要获取到okhttp的log日志,请求参数以及响应参数和数据。我们用一个小的demo来展示一下:OkHttpClient client;void initOkhttpClient() { c...

2018-10-15 19:01:37 1451

原创 安卓进阶(6)之OkHttp整体架构/基本使用/OkHttpClient原理解析

整体架构图Okhttp可以分为上层应用接口层,协议层,连接层,缓存层,I/O层,拦截器层。接口层就是我们上层开发人员调用的一些接口和API。连接层是核心,连接池以及网络请求优化都在这里面了。拦截器和缓存层是重点,比如我们要加log日志,这时候加一个拦截器。OkHttp的整体架构图如图所示:基本使用GET请求//创建OkHttpClient对象OkHttpClient client = ...

2018-10-12 11:48:48 878

原创 安卓进阶(5)之消费者/生产者模式的3种实现方式

实现的接口/** * 作者:luoxiaohui * 日期:2018/10/9 09:02 * 文件描述: 接口,消费和生产方法 */public interface Person { void consume(String personName) throws InterruptedException; void produce(String personName)...

2018-10-09 11:37:40 1559 1

原创 安卓进阶(4)之线程池以及多线程并发原理

安卓中使用线程池的场景常规接口网络请求数据;静态文件(图片)流下载;日志上传。为什么要使用线程池管理线程,不需要频繁创建和销毁,实现最高程度的线程的复用。...

2018-10-06 15:19:54 585

原创 安卓进阶(3)之Handler/Looper/MessageQueue源码分析以及原理理解

前言安卓系统是消息驱动的,所以深刻了解Handler整个消息分发机制,对于我们了解安卓系统,是一个必不可少的知识点。整个过程中,我们需要重点关注的类是:1. Handler2. Looper3. MessageQueue4. Meesage5. ThreadLocal6. Thread本博客所分析的handler消息分发机制是基于andorid-28这个sdk来的,之所以...

2018-09-20 19:09:38 683 2

原创 安卓进阶(2)之android Binder通信理解

关键字aidl进程间通信binder机制aidl全名安卓接口定义语言,用于进程间通信。简单理解的话,就是类似应用的服务器和客户端。服务器开启一个服务处理数据,客户端传递数据以及响应回调。具体使用方法见AndroidStudio实现AIDL。建议自己跟着文章手写一遍,并细看build之后由aidl文件生成的java文件中内容。参考文章 AndroidStudio实现AI...

2018-09-06 19:59:43 418

原创 安卓进阶(1)之从Glide缓存算法到了解java数据结构

Glide图片缓存分为三级:内存缓存,磁盘缓存,网络加载。 其中,内存缓存使用的机制是LRU算法+弱引用机制,磁盘缓存采用的是LRU算法。关键字 LRU算法(近期最少使用算法) LinkHashmap=HashMap+双向链表 HashMap原理 双向链表和单向链表区别参考文章Map 综述(二):彻头彻尾理解 LinkedHashMap...

2018-09-06 14:08:30 943

python聊天系统

python简单聊天系统,前后端都有。适合新手学习。

2018-12-25

安卓巴士开发者大会现场PPT(2018)

安卓巴士开发者大会现场PPT(2018),

2018-08-27

python excel文件数据转成json

最新的省市区excel数据,转成我们开发中想要的json数据。

2017-11-30

android 6.0权限申请封装

android 6.0权限申请封装

2016-08-30

java RSA非对称加密详解

java中超级详尽的RSA非对称加密介绍,以及踩过的坑。

2016-08-17

android AIDL解析

android AIDL详情解析

2016-08-09

javassist.jar

javassist.jar包,实用!

2016-07-22

android shell批量打包

android shell批量打包实用

2016-04-04

Android 360手势全景旋转

Android中360度全景旋转,可以用手势控制,经本人测试可用。

2014-04-25

二维码扫描

Android二维码扫描缩减版的源码,经测试,可用。

2014-04-04

PDF阅读模块

android阅读PDF模块的demo,经调试,可以使用。

2013-11-13

android中文api

android 中文api,英语不是很好的程序员的福利哦.

2013-11-01

HttpClient

关于Http协议的,包括它的简介,连接管理等等,讲的很详细哦!

2012-11-15

android较轻级异步任务AsyncTask

android较轻级异步任务的一点理解。

2012-11-09

android面试常见问题

面试的一些常见问题,让您在android面试中更有竞争力!

2012-08-15

android面试八大问题

一些android面试的常用问题,经本人的总结,特此奉上。

2012-08-15

空空如也

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

TA关注的人

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