intercept

从壹开始前后端分离【 .NET Core2.0/3.0 +Vue2.0 】框架之十一 || AOP自定义筛选,Redis入门 11.1

流过昼夜 提交于 2020-08-12 18:18:55
本文3.0版本文章 https://mp.weixin.qq.com/s/pjvleNGi_AazZ7COdxQyPQ Redis 部分的内容,和netcore2.0一样,不需要更新。 代码已上传Github+Gitee,文末有地址   书说上文《 从壹开始前后端分离【 .NET Core2.0 Api + Vue 2.0 + AOP + 分布式】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存 》,昨天咱们说到了AOP面向切面编程,简单的举出了两个栗子,不知道大家有什么想法呢,不知道是否与传统的缓存的使用有做对比了么?   传统的缓存是在Controller中,将获取到的数据手动处理,然后当另一个controller中又使用的时候,还是Get,Set相关操作,当然如果小项目,有两三个缓存还好,如果是特别多的接口调用,面向Service服务层还是很有必要的,不需要额外写多余代码,只需要正常调取Service层的接口就行,AOP结合Autofac注入,会自动的查找,然后返回数据,不继续往下走Repository仓储了。   昨天我发布文章后,有一个网友提出了一个问题,他想的很好,就是如果面向到了Service层,那BaseService中的CURD等基本方法都被注入了,这样会造成太多的代理类,不仅没有必要,甚至还有问题,比如把Update也缓存了

纯干货Android知识点整理(二)

放肆的年华 提交于 2020-08-12 17:52:15
本篇为第二篇整理的文章,第一篇的链接 纯干货Android知识点整理(一) 1.OkHttp解析 首先 OkHttp 内部是一个门户模式,所有的下发工作都是通过一个门户 Dispatcher 来进行分发。 然后在网络请求阶段通过责任链模式,链式的调用各个拦截器的 intercept 方法。其中有 2 个比较重要的拦截器:CacheInterceptor 和 CallServerInterceptor。它们分别用来做请求缓存和执行网络请求操作。 最后在理解源码实现的基础上,对 OkHttp 的功能进行了一些扩展,实现了网络请求进度的实现。 BridgeInterceptor:主要对 Request 中的 Head 设置默认值,比如 Content-Type、Keep-Alive、Cookie 等。 CacheInterceptor:负责 HTTP 请求的缓存处理。 ConnectInterceptor:负责建立与服务器地址之间的连接,也就是 TCP 链接。 CallServerInterceptor:负责向服务器发送请求,并从服务器拿到远端数据结果。 2.Bitmap解析 默认情况下 BitmapFactory 使用 Bitmap.Config.ARGB_8888 的存储方式来加载图片内容,而在这种存储模式下,每一个像素需要占用 4 个字节。因此上面图片 rodman

代理模式

旧巷老猫 提交于 2020-08-12 06:45:12
一 代理模式简介 代理(Proxy)是一种设计模式 提供了对目标对象另外的访问方式 代理对象代理目标对象 达到增强目标对象功能的目的 二 静态代理 需要定义接口或者父类 代理对象与目标对象一起实现相同接口或者继承相同父类 优点: 在不修改目标对象的功能前提下 对目标功能扩展 缺点: 因为代理对象需要与目标对象一起实现相同接口或者继承相同父类 所以会有很多代理类 导致类太多 同时 如果接口增加方法 代理对象与目标对象都要维护 1. 接口 /** * 接口 * Created by Hy on 2020/7/10. */ public interface IUserService { void insertUser(); String deleteUser( int id); } 2. 目标对象 /** * 目标对象 * Created by Hy on 2020/7/10. */ public class UserService implements IUserService { @Override public void insertUser() { System.out.println( "insert ok" ); } @Override public String deleteUser( int id) { System.out.println( "delete... ...

解决okhttp无法重用连接的问题

旧城冷巷雨未停 提交于 2020-08-12 04:52:17
解决okhttp无法重用连接的问题 最近在一个程序中使用okhttp调用http接口。开始时一切正常,但是测试运行一段时间后,okhttp就会报告recv失败。同时在调用端机器上,netstat显示很多套接字是TIMEWAIT状态。原来每次调用接口,okhttp都建立了一个新连接。而被调用的服务器在连接超过一定数量后会拒绝服务。 最初的想法是用连接池降低连接数。 OkHttpClient httpClient = new OkHttpClient .Builder() .connectionPool(new ConnectionPool(5, 20, TimeUnit .SECONDS)) .build(); 可是运行一段时间后,又出现了recv失败和大量的TIMEWAIT。连接池方法无效。为什么会这样呢?上网搜索一番,发现StackOverflow上有人提到,如果Request或Response的头部包含Connection: close,okhttp会关闭连接。下断点调试,果然服务器返回了Connection: close。okhttp的CallServerInterceptor在收到应答后,直接关闭了连接。 要怎么处理这种情况呢?直观的想法是用拦截器拦截应答,覆盖http头。 OkHttpClient httpClient = new OkHttpClient

CGLIB动态代理机制,各个方面都有写到

孤街醉人 提交于 2020-08-12 03:14:57
CGLIB库介绍 代理提供了一个可扩展的机制来控制被代理对象的访问,其实说白了就是在对象访问的时候加了一层封装。JDK从1.3版本起就提供了一个动态代理,它使用起来非常简单,但是有个明显的缺点:需要目标对象实现一个或多个接口。假如你想代理没有接口的类呢?可以使用CGLIB库。 CGLIB是一个强大的、高性能的代码生成库。它被广泛使用在基于代理的AOP框架(例如Spring AOP和dynaop)提供方法拦截。Hibernate作为最流行的ORM工具也同样使用CGLIB库来代理单端关联(集合懒加载除外,它使用另外一种机制)。EasyMock和jMock作为流行的Java测试库,它们提供Mock对象的方式来支持测试,都使用了CGLIB来对没有接口的类进行代理。 在实现内部,CGLIB库使用了ASM这一个轻量但高性能的字节码操作框架来转化字节码,产生新类。除了CGLIB,像Groovy和BeanShell这样的脚本语言同样使用ASM来生成Java字节码。ASM使用了一个类似于SAX分析器的机制来达到高性能。我们不建议直接使用ASM,因为这样需要对JVM非常了解,包括类文件格式和指令集。 上图展示了CGLIB库相关框架以及语言之间的关系。另外提醒下,类似于Spring AOP和Hibernate这些框架它们经常同时使用CGLIB和JDK动态代理来满足各自需要

代理模式

强颜欢笑 提交于 2020-08-11 15:00:19
一 代理模式简介 代理(Proxy)是一种设计模式 提供了对目标对象另外的访问方式 代理对象代理目标对象 达到增强目标对象功能的目的 二 静态代理 需要定义接口或者父类 代理对象与目标对象一起实现相同接口或者继承相同父类 优点: 在不修改目标对象的功能前提下 对目标功能扩展 缺点: 因为代理对象需要与目标对象一起实现相同接口或者继承相同父类 所以会有很多代理类 导致类太多 同时 如果接口增加方法 代理对象与目标对象都要维护 1. 接口 /** * 接口 * Created by Hy on 2020/7/10. */ public interface IUserService { void insertUser(); String deleteUser( int id); } 2. 目标对象 /** * 目标对象 * Created by Hy on 2020/7/10. */ public class UserService implements IUserService { @Override public void insertUser() { System.out.println( "insert ok" ); } @Override public String deleteUser( int id) { System.out.println( "delete... ...

Cglib invoke以及invokeSuper的一点区别

删除回忆录丶 提交于 2020-08-10 15:54:18
简单记录下,解决的一个问题,Cglib的invoke和invokeSuper的区别:   简而言之, invoke方法调用的对象没有增强过,invokeSuper方法调用的对象已经是增强了的,所以会再走一遍 MyMethodInterceptor的 interceptor方法,如果是个拦截器链条,就会重新在走一次拦截器链; 一。准备环境 Gglib的两个jar包,因为Cglib使用了ASM生成子类; 二。代码准备 public class Target { public void a() { System.out.println( " a 方法" ); } public void b() { System.out.println( " b 方法" ); } } import java.lang.reflect.Method; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; public class MyMethodInterceptor implements MethodInterceptor{ @Override public Object intercept(Object obj, Method method, Object[] args,

Cglib invoke以及invokeSuper的一点区别

偶尔善良 提交于 2020-08-10 15:53:41
简单记录下,解决的一个问题,Cglib的invoke和invokeSuper的区别:   简而言之, invoke方法调用的对象没有增强过,invokeSuper方法调用的对象已经是增强了的,所以会再走一遍 MyMethodInterceptor的 interceptor方法,如果是个拦截器链条,就会重新在走一次拦截器链; 一。准备环境 Gglib的两个jar包,因为Cglib使用了ASM生成子类; 二。代码准备 public class Target { public void a() { System.out.println( " a 方法" ); } public void b() { System.out.println( " b 方法" ); } } import java.lang.reflect.Method; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; public class MyMethodInterceptor implements MethodInterceptor{ @Override public Object intercept(Object obj, Method method, Object[] args,

从壹开始前后端分离【 .NET Core2.0/3.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存

时光怂恿深爱的人放手 提交于 2020-08-09 21:29:18
本文3.0版本文章 https://mp.weixin.qq.com/s/pjvleNGi_AazZ7COdxQyPQ 代码已上传Github+Gitee,文末有地址   上回《 从壹开始前后端分离【 .NET Core2.0 Api + Vue 2.0 + AOP + 分布式】框架之九 || 依赖注入IoC学习 + AOP界面编程初探 》咱们说到了依赖注入Autofac的使用,不知道大家对IoC的使用是怎样的感觉,我个人表示还是比较可行的,至少不用自己再关心一个个复杂的实例化服务对象了,直接通过接口就满足需求,当然还有其他的一些功能,我还没有说到,抛砖引玉嘛,大家如果有好的想法,欢迎留言,也可以来群里,大家一起学习讨论。昨天在文末咱们说到了AOP面向切面编程的定义和思想,我个人简单使用了下,感觉主要的思路还是通过拦截器来操作,就像是一个中间件一样,今天呢,我给大家说两个小栗子,当然,你也可以合并成一个,也可以自定义扩展,因为我们是整个系列是基于Autofac框架,所以今天主要说的是基于Autofac的Castle动态代理的方法,静态注入的方式以后有时间可以再补充。   时间真快,转眼已经十天过去了,感谢大家的鼓励,批评指正,希望我的文章,对您有一点点儿的帮助,哪怕是有学习新知识的动力也行,至少至少,可以为以后跳槽增加新的谈资 [哭笑],这些天我们从面向对象OOP的开发

Python机器学习笔记:SVM(4)——sklearn实现

喜欢而已 提交于 2020-08-08 04:27:42
  上一节我学习了SVM的推导过程,下面学习如何实现SVM, 具体的参考链接都在第一篇文章中 ,SVM四篇笔记链接为: Python机器学习笔记:SVM(1)——SVM概述 Python机器学习笔记:SVM(2)——SVM核函数 Python机器学习笔记:SVM(3)——证明SVM Python机器学习笔记:SVM(4)——sklearn实现   对SVM的概念理清楚后,下面我们对其使用sklearn进行实现。 1,Sklearn支持向量机库概述   我们知道SVM相对感知器而言,它可以解决线性不可分的问题,那么它是如何解决的呢?其思想很简单就是对原始数据的维度变换,一般是扩维变换,使得原样本空间中的样本点线性不可分,但是在变维之后的空间中样本点是线性可分的,然后再变换后的高维空间中进行分类。   上面将SVM再赘述了一下,下面学习sklearn中的SVM方法,sklearn中SVM的算法库分为两类,一类是分类的算法库,主要包含LinearSVC,NuSVC和SVC三个类,另一类是回归算法库,包含SVR,NuSVR和LinearSVR三个类,相关模块都包裹在sklearn.svm模块中。   对于SVC,NuSVC和LinearSVC 三个分类的库,SVC和NuSVC差不多,区别仅仅在于对损失的度量方式不同,而LinearSVC从名字就可以看出,他是线性分类