strip

Spring AOP 原理

混江龙づ霸主 提交于 2020-03-24 08:49:41
3 月,跳不动了?>>> Spring AOP ,应该是国内面试必问题,网上有很多答案,其实背背就可以。但今天笔者带大家一起深入浅出源码,看看他的原理。以期让印象更加深刻,面试的时候游刃有余。 Spring AOP 原理 简单说说 AOP 的设计: 每个 Bean 都会被 JDK 或者 Cglib 代理。取决于是否有接口。 每个 Bean 会有多个“方法拦截器”。注意:拦截器分为两层,外层由 Spring 内核控制流程,内层拦截器是用户设置,也就是 AOP。 当代理方法被调用时,先经过外层拦截器,外层拦截器根据方法的各种信息判断该方法应该执行哪些“内层拦截器”。内层拦截器的设计就是职责连的设计。 是不是贼简单。事实上,楼主之前已经写过一个简单的例子,地址: 使用 Cglib 实现多重代理 看完之后更简单。 可以将 AOP 分成 2 个部分来扯,哦,不,来分析。。。第一:代理的创建;第二:代理的调用。 注意:我们尽量少贴代码,尽量用文字叙述,因为面试的时候,也是文字叙述,不可能让你把代码翻出来的。。。所以,这里需要保持一定的简洁,想知道细节,看 interface 21 源码,想知道的更细,看 Spring Framework 最新的 master 分支代码。 代码位置: com.interface21.aop 包下。 开始分析(扯): 代理的创建(按步骤): 首先,需要创建代理工厂

跨域脚本攻击(XSS):存储性 XSS 攻击、反射型 XSS 攻击和基于 DOM 的 XSS 攻击

牧云@^-^@ 提交于 2020-03-12 23:44:49
跨域脚本攻击(XSS)是把恶意脚本注入 HTML 文件或 DOM 中,在用户浏览页面时实施攻击的一种手段。 一、恶意脚本能做什么? 窃取 Cookie 信息 document.cookie; // 输出:Gnahz=Test-Cookie 监听用户行为, addEventListener 接口监听键盘事件,比如获取输入的信用卡信息。 修改 DOM 伪造假的登录窗口,欺骗用户输入用户名和密码等信息。 在页面内生成浮窗广告。 二、如何攻击?常见的有三种注入方式:存储性 XSS 攻击、反射型 XSS 攻击和基于 DOM 的 XSS 攻击。 存储型 XSS 攻击 1、黑客利用站点漏洞将一段恶意的 JavaScript 代码提交到数据库中。 2、如果用户向网站请求了包含恶意脚本的页面。 3、浏览这页面时,恶意脚本就会把用户的 Cookie 信息等数据窃取上传到黑客的服务器。 反射型 XSS 攻击 1、用户将一段含有恶意代码的请求提交给 Web 服务器。 2、服务器受到请求后又将恶意代码反射给浏览器。 与存储型 XSS 攻击不同是:服务器不会存储反射 XSS 攻击的脚本。 现实场景:聊天群或邮箱诱导用户点击的恶意链接。 基于 DOM 的 XSS 攻击 不牵涉到 Web 服务器的攻击,通过各种手段将恶意脚本注入用户的页面中,比如通过网络劫持在页面传输过程中或使用页面过程中修改 HTML

Google 以 Flutter 作为原生突破口,移动端即将统一了

耗尽温柔 提交于 2020-03-02 12:27:05
Android 的前生今世 Android 系统 Android系统作为全球第一大系统,基于 Java 开发的移动端有着诸多的性能优势。 2018年前 H5 的性能瓶颈和 RN 的停更 导致业界对跨平台开发失去信心。 直到2018年10月Google推出首个 Flutter 跨平台解决方案,打破整个移动开发的方向。 为什么 Flutter 成为 Android 方向标 跨平台性:Flutter基于图像绘制引擎进行渲染,在不同平台下绘制效果是绝对一致的,能做到真正的跨平台,一处写处处运行 性能优异性:不同于H5通过DOM渲染 和RN映射组件,Flutter直接基于native进行绘制。性能上完全超过原生 热重载性: Android原生开发 会遇到 编译-打包-安装 三部曲。开发效率迟迟得不到提升。热重载技术在Flutter内完美体现 Flutter 详细介绍 Dart 语法编译:Dart 是一种强类型、跨平台的客户端开发语言。具有专门为客户端优化、高生产力、快速高效、可移植易学的风格。Dart主要由Google负责开发和维护 Flutter 插件:Flutter使用的Dart语言无法直接调用Android系统提供的Java接口,这时就需要使用插件来实现中转。Flutter官方提供了丰富的原生接口封装 Flutter 系统结构 Skia 图像处理引擎 2005年Skia图像处理引擎成立

Add support for Android 9-patch images in BorderImage

你离开我真会死。 提交于 2020-03-02 01:34:00
The 9-patch image implementation in Qt Quick Controls 1 is an internal implementation detail of the Android style. It cannot handle .9.png image files out of the box, but takes a normal image without borders and the border information separately (as it was provided by the Ministro style assets). http://code.qt.io/cgit/qt/qtquickcontrols.git/tree/src/controls/Styles/Android/qquickandroid9patch_p.h http://code.qt.io/cgit/qt/qtquickcontrols.git/tree/src/controls/Styles/Android/qquickandroid9patch.cpp The existing implementation could serve as a fine starting point for implementing a proper

IPv4 与 IPv6 的比较

你说的曾经没有我的故事 提交于 2020-03-01 13:49:06
米扑博客分享总结了一篇博客: IPv4 与 IPv6 的比较 IPv4 地址长度:32位 地址数量:2^32(约4×10^9) IPv4 头结构 IPv6 地址长度:128位 地址数量:2^128(约3.4×10^38) IPv6 头结构 IPv6 与 IPv4 头部对比 IPv4 与 IPv6 的比较 描述 IPv4 IPv6 IP头部 长度为 32 位( 4 个字节 ) 地址由网络和主机部分组成,这取决于地址类。根据地址的前几位,可定义各种地址类: A、B、C、D 或 E 。IPv4 地址的总数为 4 294 967 296。 IPv4 地址的文本格式为 nnn.nnn.nnn.nnn,其中 0<=nnn<=255,而每个 n 都是十进制数。可省略前导零。最大打印字符数为 15 个,不计掩码。 长度为 128 位( 16 个字节 ) 基本体系结构的网络数字为 64 位,主机数字为 64 位。通常,IPv6 地址(或其部分)的主机部分将派生自 MAC 地址或其他接口标识。 根据子网前缀,IPv6 的体系结构比 IPv4 的体系结构更复杂。 IPv6 地址的数目比 IPv4 地址的数目大 1028(79 228 162 514 264 337 593 543 950 336)倍。IPv6 地址的文本格式为 xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx

Ruby on rails DRY strip whitespace from selective input forms

余生长醉 提交于 2020-02-27 12:28:28
问题 I'm fairly new to rails so bear with me. I want to strip whitespace from a selective group of input forms. But I would like a DRY solution. So I was thinking there might be a solution such as a helper method, or a custom callback. Or a combination such as before_validation strip_whitespace(:attribute, :attribute2, etc) Any help is awesome! Thanks! EDIT I have this in my model file ... include ApplicationHelper strip_whitespace_from_attributes :employer_name ... and I have this in my

linux下将Python3解释器交叉编译移植到android平台

我是研究僧i 提交于 2020-02-27 04:49:19
已知资料: http://www.srplab.com/cn/files/others/compile/cross_compiling_python_for_android.html Cross Compiling Python for Android https://m.2cto.com/kf/201511/448789.html 在arm上使用python-2.7.10 上述资料主要是在移植python2.7版本,具体移植python3的版本资料并不多。 起初打算移植python3.5.6版本,但是发现python3.5.6的移植性似乎不好,在解决完python主程序和libpython3.5.so的编译后,所有扩展均因为各种找不到c函数或者找不到python的对象或函数名之类的问题无法编译。后决定编译python3.7.1版本。记录如下。 编译记录: 源码从python.org下载。 首先编译Linux版本的Python3.7.1并安装。我选择安装到~/opt目录下,以加入环境变量的形式替代系统使用的python3.5。命令如下: ~/projects tar xvf ~/Download/Python-3.7.1.tar.xz -C . ~/projects cd Python-3.7.1 ~/projects/Python-3.7.1 mkdir build.pc ~

手机评论文本挖掘与数据分析(Python)

血红的双手。 提交于 2020-02-26 16:44:26
目的 各大电商竞争越来激烈,为了提升客户服务质量,除了打价格战外,了解客户的需求点,对消费者的文本评论进行数据挖掘,倾听客户的心声越来越重要。 工具 贝壳采集器 Google浏览器 Python3.7 + Pycharm 数据采集 ①本文对京东平台的手机进行爬虫,首先进入京东商城,选择一款手机,这里以华为Mate 30 Pro 5G为例 ②在采集平台输入网址,点击贝壳采集开始配置信息 ③因为是采集评论所以还需要进行下预操作配置切换页面:点击预操作按钮-->添加点击元素按钮-->左键点击流程图中添加元素按钮(悬浮显示操作键)-->点击悬浮显示操作键<选择按钮> -->点击网页商品评论TAB页切换按钮 -->点击保存 ④没有识别出评论信息,手工操作下:清空字段-->更改页面类型为手工识别列表 --> 选中两个一样元素(这里两个用户名称) -->下一页未自动识别成功-->更改分页类型为手动点击下一页-->配置完成-->开始采集 数据预处理 当我们通过爬虫获取到我们想要的数据之后,进行简单的观察,可以发现评论的一些特点: 文本短,基本上大量的评论就是一句话. 情感倾向明显:明显的词汇 如”好” “可以” 语言不规范:会出现一些网络用词,符号,数字等 重复性大:一句话出现词语重复 数据量大. 故我们需要对这些数据进行数据预处理 数据预处理包括:去重、分词等 下面我们将进行数据清洗

How to remove WindowsPath and parantheses from a string [duplicate]

妖精的绣舞 提交于 2020-02-26 04:28:45
问题 This question already has an answer here : Reference - What does this regex mean? (1 answer) Closed 4 days ago . I need to remove WindowsPath( and some of the closing parentheses ) from a directory string. x= (WindowsPath('D:/test/1_birds_bp.png'),WindowsPath('D:/test/1_eagle_mp.png')) What I need to have is x= ('D:/test/1_birds_bp.png', 'D:/test/1_eagle_mp.png') I don't know how to do multiple strings at once. by following @MonkeyZeus I tried; y = [re.sub("(?<=WindowsPath\(').*?(?='\))",'',a

How to remove WindowsPath and parantheses from a string [duplicate]

假装没事ソ 提交于 2020-02-26 04:27:48
问题 This question already has an answer here : Reference - What does this regex mean? (1 answer) Closed 4 days ago . I need to remove WindowsPath( and some of the closing parentheses ) from a directory string. x= (WindowsPath('D:/test/1_birds_bp.png'),WindowsPath('D:/test/1_eagle_mp.png')) What I need to have is x= ('D:/test/1_birds_bp.png', 'D:/test/1_eagle_mp.png') I don't know how to do multiple strings at once. by following @MonkeyZeus I tried; y = [re.sub("(?<=WindowsPath\(').*?(?='\))",'',a