分析

对象池common-pool2源码分析之对象状态

梦想与她 提交于 2019-12-17 20:42:02
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 对象池common-pool2源码分析 对象池common-pool2策略分析 从前两篇的分析中可以看出对象池中的对象会被激活,钝化,销毁等 ,那么做这些操作的对象需要满足什么条件呢 ,与这些操作之后相对应的对象的状态是什么样的呢? 首先从PooledObjectState开始分析 public enum PooledObjectState { /** * In the queue, not in use. */ IDLE, /** * In use. */ ALLOCATED, /** * In the queue, currently being tested for possible eviction. */ EVICTION, /** * Not in the queue, currently being tested for possible eviction. An * attempt to borrow the object was made while being tested which removed it * from the queue. It should be returned to the head of the queue once * eviction testing

【汇编】C++ 函数调用之——有参无返回调用(传值)

こ雲淡風輕ζ 提交于 2019-12-10 04:01:09
C++函数有参调用有几种传参方式: 一.传值 二.传指针(地址) 三.传引用 其中参数可被const修饰,也可以有默认值。下面分情况讨论: 为了简洁,省略main函数的汇编码而直接给出func函数的汇编码。 一.传值调用 有源代码: void func(int a,char b){ int c; c=a+b; } int main(int argc,char *argv[]) { //call func func(10,'a'); return 0; } 下面看看汇编码: 调用发生时: //call func func(10,'a'); //进行参数压栈操作,首先是'a'压入栈,然后是10压栈,然后call跳转表,再由调转表call函数 00F1141E push 61h 00F11420 push 0Ah 00F11422 call 00F1113B //函数调用完成后,栈减小8字节,两个dword,因为CPU对栈的操作都是双字操作,这里两个参数就是两个双字 00F11427 add esp,8 具体内存中的表现是这样的(先让func把栈初始化): 显然不在func的stack内,注意两个参数前面还有两个DWORD, 一个是00f1 1427,另一个是00dd f794;这两个DWORD的产生应该是在PUSH两个参数之后, 又有的两个PUSH, 显然,第一个PUSH 00f1

数据库性能优化之SQL语句优化1

不问归期 提交于 2019-12-05 20:39:04
温馨提示:本篇内容均来自网上,本人只做了稍微处理,未进行细致研究,仅当做以后不备之需,如若你喜欢可尽情转走。 一、问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一。系统优化中一个很重要的方面就是SQL语句的优化。对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就可,而是要写出高质量的SQL语句,提高系统的可用性。 在多数情况下,Oracle使用索引来更快地遍历表,优化器主要根据定义的索引来提高性能 。但是,如果在SQL语句的where子句中写的SQL代码不合理,就会 造成优化器删去索引而使用全表扫描 ,一般就这种SQL语句就是所谓的劣质SQL语句。在编写SQL语句时我们应清楚优化器根据何种原则来删除索引,这有助于写出高性能的SQL语句。 二、SQL语句编写注意问题 下面就某些SQL语句的where子句编写中需要注意的问题作详细介绍。在这些where子句中,即使某些列存在索引,但是由于编写了劣质的SQL,系统在运行该SQL语句时也不能使用该索引,而同样使用全表扫描,这就造成了响应速度的极大降低。 1. 操作符优化 (a) IN

QEMU1.3.0的源码分析三:user model之linux

老子叫甜甜 提交于 2019-12-05 19:05:43
作者: snsn1984 从源码目录来看,user model有两块内容bsd-user和linux-user。我主要研究了下linux-user这种情况。 首先要提一下通常容易关注的焦点,linux-user下的函数入口点:/源码目录/linux-user/main.c中的 Line:3388 int main(int argc, char **argv, char **envp). 找到了入口函数,就可以根据这个main函数中的调用关系来看看这个情况下的主要执行流程和动作了。 int main(int argc, char **argv, char **envp) { module_call_init(MODULE_INIT_QOM); qemu_cache_utils_init(envp); /*初始化了tcg的相关部分,包含了cpu动态转化的一些初始化操作。*/ tcg_exec_init(0); cpu_exec_init_all(); /*包含了虚拟cpu的初始化*/ env = cpu_init(cpu_model); /*加载可执行程序,即Guest code*/ ret = loader_exec(filename, target_argv, target_environ, regs, info, &bprm); target_set_brk(info->brk)

Hive 在多维统计分析中的应用 & 技巧总结

别等时光非礼了梦想. 提交于 2019-12-04 22:10:49
多维统计一般分两种,我们看看 Hive 中如何解决: 1、同属性的多维组合统计 (1)问题: 有如下数据,字段内容分别为:url, catePath0, catePath1, catePath2, unitparams https://cwiki.apache.org/confluence 0 1 8 {"store":{"fruit":[{"weight":1,"type":"apple"},{"weight":9,"type":"pear"}],"bicycle":{"price":19.951,"color":"red1"}},"email":"amy@only_for_json_udf_test.net","owner":"amy1"} http://my.oschina.net/leejun2005/blog/83058 0 1 23 {"store":{"fruit":[{"weight":1,"type":"apple"},{"weight":9,"type":"pear"}],"bicycle":{"price":19.951,"color":"red1"}},"email":"amy@only_for_json_udf_test.net","owner":"amy1"} http://www.hao123.com/indexnt.html?sto 0 1 25 {

如何在Python开发环境Wing IDE中使用GTK和PyGObject

跟風遠走 提交于 2019-12-03 01:43:09
Wing IDE是一个集成开发环境,可用于编辑、测试和调试使用PyGObject为GTK编写的Python代码。Wing IDE提供自动完成、调用提示、一个强大的调试器,以及许多其他功能,可帮助用户编写、浏览和理解Python代码。 自动完成 PyGObject使用惰性装载功能来加速启动基于它的应用程序。这可以防止Wing IDE的分析引擎检查PyGObject覆盖的API导致IDE不能提供自动完成功能。 为了解决这一问题,可以使用Fakegir,它是一个构建假的PyGObject模块Python程序包的工具,可以放置到定义在Wing IDE项目属性的Python路径。 Fakegir的README.md提供了使用细节。 因为Wing IDE不仅在编辑中使用配置的Python路径,还在调试或执行代码时使用配置的Python路径,所以在导入任何PyGObject-provided模块之前,需要从sys.path中消除假模块目录: import sys, os kFakegirCache = os.path.join(os.path.expanduser( ' ~ ' ), ' .cache/fakegir/ ' ) if kFakegirCache in sys.path: sys.path.remove(kFakegirCache) 完成上述操作之后,Wing

rawurlencode() urlencode() 函数 分析

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-01 18:21:04
rawurlencode string rawurlencode ( string $str ) 返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号( % )后跟两位十六进制数。这是在 RFC 1738 中描述的编码,是为了保护原义字符以免其被解释为特殊的 URL 定界符,同时保护 URL 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱。例如,如果你想在 FTP 的 URL 中包含密码: Example #1 rawurlencode() 示例 1 <?php echo '<a href="ftp://user:' , rawurlencode ( 'foo @+%/' ), '@ftp.example.com/x.txt">' ; ?> 或者,如果你想通过 URL 的 PATH_INFO 构成部分去传递信息: Example #2 rawurlencode() 示例 2 <?php echo '<a href="http://example.com/department_list_script/' , rawurlencode ( 'sales and marketing/Miami' ), '">' ; ?> urldecode string urldecode ( string $str ) 解码给出的已编码字符串中的任何 % ##

snort源码分析 一 (总体说明)

亡梦爱人 提交于 2019-12-01 16:38:34
简介 snort 有三种工作模式:嗅探器、数据包记录器、网络入侵检测系统。嗅探器模式仅仅是从网络上读取数据包并作为连续不断的流显示在终端上。 数据包记录器模式把数据包记录到硬盘上。网路入侵检测模式是最复杂的,而且是可配置的。我们可以让 snort 分析网络数据流以匹配用户定义的一些规则, 并根据检测结果采取一定的动作。 功能介绍 snort 有三种工作模式:嗅探器、数据包记录器、网络入侵检测系统。嗅探器模式仅仅是从网络上读取数据包并作为连续不断的流显示在终端上。 数据包记录器模式把数据包记录到硬盘上。 网路入侵检测模式是最复杂的, 而且是可配置的。 我们可以让 snort 分析网络数据流以匹配用户定义的一些规则, 并根据检测结果采取一定的动作。 嗅探器 所谓的嗅探器模式就是 snort 从网络上读出数据包然后显示在你的控制台上。首先,我们从最本的用法入手。如果你只要把 TCP/IP 包头信息打印在屏 幕上,只需要输入下面的命令: ./snort -v 使用这个命令将使 snort 只输出 IP 和 TCP/UDP/ICMP 的包头信息。 如果你要看到应用层的数据,可以使用: ./snort -vd 这条命令使 snort 在输出包头信息的同时显示包的数据信息。 如果你还要显示数据链路层的信息,就使用下面的命令: ./snort -vde

Spring3.2 MVC 分析

一世执手 提交于 2019-11-30 08:14:47
Spring3.2 MVC 分析: SpringMVC现在应该用得很广泛了,其配置清晰,灵活度,定制能力等都是很强的,相比Struts2也是胜过一筹,还是从源码来分析一下,SpringMVC为我们做了什么。 先从配置文件开始,看web.xml,用过SpringMVC的同学应该都很熟悉: <web-app> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener<!-- Spring根容器在这里被建立起来 --> </listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:configs/beans.xml</param-value> </context-param> <!-- SpringMVC子容器会在DispatherServlet初始化过程中被建立起来 --> <servlet> <servlet-name>example</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet

zg手册 之 python2.7.7源码分析(4)-- pyc字节码文件

时光怂恿深爱的人放手 提交于 2019-11-30 05:24:13
什么是字节码 python解释器在执行python脚本文件时,对文件中的python源代码进行编译,编译的结果就是byte code(字节码) python虚拟机执行编译好的字节码,完成程序的运行 python会为导入的模块创建字节码文件 字节码文件的创建过程 当a.py依赖b.py时,如在a.py中import b python先检查是否有b.pyc文件(字节码文件),如果有,并且修改时间比b.py晚,就直接调用b.pyc 否则编译b.py生成b.pyc,然后加载新生成的字节码文件 字节码对象 每个py文件会包含许多代码块(Code Block) 每个代码块(Code Block)会编译创建一个字节码对象(PyCodeObject) PyCodeObject 对象本身是嵌套的,根据代码块的结构嵌套 子 PyCodeObject 对象保存在父对象的 co_consts 变量中 代码块 Code Block # 整个文件是一个代码块 1 # 代码块 2 class TestA(object): pass # 代码块 3 class TestB(object): pass # 代码块 4 def show(): print 'show ...' a = TestA()show() 字节码对象的结构 /* 字节码对象 */ typedef struct { PyObject_HEAD