ASM

Spring和Springboot相关知识点整理

吃可爱长大的小学妹 提交于 2020-07-25 19:58:00
简介 本文主要整理一些Spring & SpringBoot应用时和相关原理的知识点,对于源码不做没有深入的讲解。 1. 思维导图 右键新窗口打开可以放大。 说明 使用@Configuration在java代码中声明一个bean——而不是使用xml——实际上很早就有了(至少在《Spring实战(第3版)》出版时,也就是Spring3.0时),我一直以为是SpringBoot的新特性。 2. Spring 2.1 AOP术语 通知Advice —— 切面要做什么,何时执行。何时,包括方法调用前、方法调用后、方法成功调用后、方法调用抛异常后、环绕(Around)。环绕允许提供一些需要跨越方法调用前后的功能,如计算调用耗时。 连接点Joinpoint —— 应用执行时能插入切面的点。实际上是一个逻辑概念,不体现在配置中。 切点Pointcut —— 执行通知的具体的连接点。 切面Aspect —— 通知+切点 引入Introduction —— 允许为类添加新的方法或属性。(个人理解即应用使用切面中的方法和属性,就好像这些方法和属性是原生的一样。可以参考<aop:declare-parents>元素) 织入Weaving —— 将切面应用到目标对象创建新的代理对象的过程,Spring使用的是运行时。编译期和类加载时是其他的方式。 2.2 Bean的生命周期 虽然被称为生命周期

阿里云发布新一代容器、Serverless等云原生产品,加速企业向现代IT架构演进

偶尔善良 提交于 2020-07-24 21:46:01
在6月9日2020阿里云线上峰会上,云原生应用平台产品总监赵林(丹臣)发表了《云原生2020新产品发布 传统应用架构往现代应用架构快速演进的基础设施》的主题演讲,详细介绍了阿里云全新发布的容器、中间件、Serverless等产品。随着数字经济的快速发展和扩张,越来越多的企业开始采用云原生计算的思想和技术,以主导企业的数字化转型架构。 新产品发布和解决方案升级,助力企业从传统IT架构向现代应用架构演进 云原生的技术和产品,可以帮助用户轻松地从原有的 IT 架构向现代应用架构演进。从底层应用托管平台来看,阿里云提供了容器服务ACK/ASK。在应用PaaS层,阿里云提供了SAE、EDAS、Web+三款产品。在上层,阿里云提供了函数FaaS服务,可以满足不同的业务需求。不仅如此,阿里云还提供了各种各样的中间件服务,包括业界最为完整丰富的消息队列服务,覆盖了所有常见的消息协议,如国内著名的开源消息中间件产品RocketMQ、业界流行的Kafka,AMQP/MQTT 消息队列都可以在阿里云上找到对应的商业化服务。在其它中间件领域,如微服务引擎MSE、应用配置管理ACM、云服务总线CSB,以及针对事务服务的GTS等,都可以帮助企业用户快速构建现代化的应用架构。 阿里云之所以提供如此丰富全面的云原生技术和产品,核心还是要满足客户多样化的需求。 除了应用托管平台以及常见的中间件之外

信号SIG详解

梦想的初衷 提交于 2020-05-09 18:57:22
1. 定义 简而言之,信号是一种软件中断,提供了一种处理异步的方法,信号发生是随机的。例如键盘输入中断按键(^C),它的发生在程序执行过程中是不可预测的。 硬件异常也能产生信号,例如被零除、无效内存引用(test里产生的就是这种错误)等。这些条件通常先由内核硬件检测到,然后通知内核。内核将决定产生什么样的信号。 同一个信号的额外发生通常不会被排队。如果信号在被阻塞时发生了5次,当我们反阻塞这个信号时,这个信号的信号处理函数通常只被调用一次。 同一时刻只能处理一个信号,在信号处理函数发信号给自己时,该信号会被pending。 信号的数值越小,则优先级越高。当进程收到多个待处理信号时,总是先处理优先级别高的信号。 信号处理函数的栈可以使用被中断的也可以使用独立的,具体可以通过系统调用设置。 2. 处理方式 忽略:接收到信号后不做任何反应。 捕获:用自定义的信号处理函数来执行特定的动作。 默认:接收到信号后按系统默认的行为处理该信号。 这是多数应用采取的处理方式。 3. 类型 这里列出主要的信号,具体可查看bionic/libc/kernel/arch-arm/asm/signal.h: 名称 数字 标准 默认行为 说明 SIGILL 4 ANSI 终止+coredump 执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行数据段. 堆栈溢出时也有可能产生这个信号

Delphi常用关键字用法详解

亡梦爱人 提交于 2020-05-08 21:16:32
absolute: // 它使得你能够创建一个新变量, 并且该变量的起始地址与另一个变量相同. var Str: string [ 32 ]; StrLen: Byte absoluteStr; // 这个声明指定了变量StrLen起始地址与Str相同. // 由于字符串的第0个位置保存了字符串的长度, 所以StrLen的值即字符串长度. begin Str : = ' abc ' ; Edit1.Text : = IntToStr(StrLen); end ; abstract: // 它允许你创建抽象的方法, 包括有抽象方法的类称为抽象类. // Abstract关键字必须与Virtual或Dynamic关键字同时使用, 因为抽象方法必须被覆盖式实现. // 抽象类不能实例化, 抽象方法不能包含方法体. type TDemo = class private protected procedure X; virtual ; abstract ; public constructor Create ; destructor Destroy ; override ; published end ; and: // 一、表示逻辑与 if (a> 0 ) and (b> 0 ) then // 二、表示位运算 var a,b,c: Integer; begin c : = (a and

Spring框架IOC和AOP的实现原理(概念)

非 Y 不嫁゛ 提交于 2020-05-08 08:28:53
IoC(Inversion of Control) (1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控。控制权由应用代码中转到了外部容器,控制权的转移是所谓反转。 对于Spring而言,就是由Spring来控制对象的生命周期和对象之间的关系;IoC还有另外一个名字——“依赖注入(Dependency Injection)”。从名字上理解,所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,即由容器动态地将某种依赖关系注入到组件之中。 (2). 在Spring的工作方式中,所有的类都会在spring容器中登记,告诉spring这是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。 (3). 在系统运行中,动态的向某个对象提供它所需要的其他对象。 (4). 依赖注入的思想是通过反射机制实现的,在实例化一个类时,它通过反射调用类中set方法将事先保存在HashMap中的类属性注入到类中 。 总而言之,在传统的对象创建方式中

【自制操作系统03】读取硬盘中的数据

二次信任 提交于 2020-05-08 05:52:37
通过 【自制操作系统01】硬核讲解计算机的启动过程 和 【自制操作系统02】环境准备与启动区实现 的讲解,我们已经实现了一个最简单的操作系统(仅仅一条机器指令)。 今天我们要再往前进一步,逐渐将这个最简单的操作系统完善起来。之前最简单的操作系统是写在启动区的 512 字节里,这么小的空间以后肯定不能全部用来写操作系统的代码,所以它的主要任务就是将硬盘中更多的数据读取到内存里,并跳转到内存的那个位置开始运行。 这里不得不回顾一下每节课都说到的四次跳跃: 一跳 :按下开机键,CPU 将 PC 寄存器的值强制初始化为 0xffff0,这个位置是 BIOS 程序的入口地址 二跳 :该入口地址处是一个跳转指令,跳转到 0xfe05b 位置,开始执行 三跳 :执行了一些硬件检测工作后,最后一步将启动区内容加载(复制)到内存 0x7c00,并跳转到这里 四跳 :启动区代码主要是加载操作系统内核,并跳转到加载处 其实我们可以无限跳跃下去,只要感觉某一个环节的任务复杂了,就可以分成两步来走。但也完全可以从第三跳开始就再也不跳转了,把所有操作系统需要的指令和数据都从硬盘中加载到内存,然后执行,但这样显然不好。 一、代码总览 先不说别的,先发上来一份本章内容的全部代码 mbr.asm ;----BIOS把启动区加载到内存的该位置,所以需设置地址偏移量 section mbr vstart=0x7c00

stdcall cdecl fastcall thiscall nakedcall Calling Conventions

我怕爱的太早我们不能终老 提交于 2020-05-06 21:08:17
stdcall cdecl fastcall thiscall nakedcall Calling Conventions 有一定C++开发经验的人一定对”__cdecl、__stdcall、__fastcall”肯定不陌生吧!但你真正理解了吗?是的,我曾在这采了无数个坑,栽了无数个跟头,终于忍无可忍要把它总结一下(虽然我已经有能力解决大部分这种问题了)! 什么是调用约定 函数的调用约定,顾名思义就是对函数调用的一个约束和规定(规范),描述了函数参数是怎么传递和由谁清除堆栈的。它决定以下内容:(1)函数参数的压栈顺序,(2)由调用者还是被调用者把参数弹出栈,(3)以及产生函数修饰名的方法。 我们知道函数由以下几部分构成:返回值类型 函数名(参数列表),如: 【code1】 void function(); int add(int a, int b); 1 2 以上是大家所熟知的构成部分,其实函数的构成还有一部分,那就是调用约定。如下: 【code2】 void __cdecl function(); int __stdcall add(int a, int b); 1 2 上面的__cdecl和__stdcall就是调用约定,其中__cdecl是C和C++默认的调用约定,所以通常我们的代码都如 【code1】中那样定义,编译器默认会为我们使用__cdecl调用约定。常见的调用约定有

ES报错:"illegal_argument_exception"

假如想象 提交于 2020-05-06 10:51:06
ES报错具体错误如下: { "error": { "root_cause": [ { "type": "illegal_argument_exception", "reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [createHour] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead." } ], "type": "search_phase_execution_exception", "reason": "all shards failed", "phase": "query", "grouped": true, "failed_shards": [ { "shard": 0, "index": "gmall1205_order", "node": "LCQa858ERH6qw_7asM2R3Q", "reason": { "type": "illegal_argument_exception

linux环境中,openssl升级及openresty中nginx基于新版本openssl重新编译

别来无恙 提交于 2020-05-06 02:53:59
需求说明 : 最近在对系统进行安全扫描的时候,出现了openssl版本的问题,建议对openssl版本进行升级,在此记录下升级过程。 环境说明 : 操作系统:RHEL 6.6 升级 操作过程 : 1.下载最新版本openssl 下载地址:https://www.openssl.org/source/ 下载1.0.2的分支版本 2.将压缩包上传到服务器上 3.查看当前openssl版本信息 [root@openssl ~]# openssl version - a OpenSSL 1.0 .1e-fips 11 Feb 2013 built on: Fri Aug 15 03 : 59 : 00 EDT 2014 platform: linux - x86_64 options: bn( 64 , 64 ) md2( int ) rc4(16x, int ) des(idx,cisc, 16 , int ) idea( int ) blowfish(idx) compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -DTERMIO -Wall -O2 -g -pipe -Wall -Wp,

arm三大编译器的不同选择编译

邮差的信 提交于 2020-05-06 00:38:59
ARM 系列目前支持三大主流的工具链,即ARM RealView (armcc), IAR EWARM (iccarm), and GNU Compiler Collection (gcc). 在 core_cm3.h 中有如下定义: /* define compiler specific symbols */ #if defined ( __CC_ARM ) #define __ASM __asm /*!< asm keyword for armcc */ #define __INLINE __inline /*!< inline keyword for armcc */ #elif defined ( __ICCARM__ ) #define __ASM __asm /*!< asm keyword for iarcc */ #define __INLINE inline /*!< inline keyword for iarcc. Only avaiable in High optimization mode! */ #define __nop __no_operation /*!< no operation intrinsic in iarcc */ #elif defined ( __GNUC__ ) #define __ASM asm /*!< asm keyword