初始化

libevent 初始化与event_init

为君一笑 提交于 2020-12-03 12:36:20
概述 在使用libevent函数之前,首先需要调用其event_init函数进行初始化。 初始化过程主要是创建一个全局默认的current_base变量,其类型为 struct event_base。 struct event_base对象变量可由eventn_base_new()函数创建并初始化。 libevent中,部分函数默认直接操作全局current_base,部分相同功能函数 可特别指定由event_base_new()创建的其他struct event_base变量,如: event_set()默认操作的全局current_base变量, event_base_set()则操作指定的event_base变量。 event_init与event_base_new函数 该函数将调用event_base_new()函数,创建并初始化一个struct event_base对象, 并将该对象赋值给全局变量current_base,作为全局默认的event_base。 event_base_new()则用于创建一个新的event_base结构对象,并对其进行初始化。 初始化过程包括选择使用的IO事件模型,创建事件队列等。 event_base结构 struct event_base { const struct eventop *evsel; void *evbase; int

谜题40:不情愿的构造器

≯℡__Kan透↙ 提交于 2020-04-08 13:57:47
尽管在一个方法声明中看到一个throws子句是很常见的,但是在构造器的声明中看到一个throws子句就很少见了。下面的程序就有这样的一个声明。那么,它将打印出什么呢? public class Reluctant { private Reluctant internalInstance = new Reluctant(); public Reluctant() throws Exception { throw new Exception("I‘m not coming out"); } public static void main(String[] args) { try { Reluctant b = new Reluctant(); System.out.println("Surprise!"); } catch (Exception ex) { System.out.println("I told you so"); } } } main方法调用了Reluctant构造器,它将抛出一个异常。你可能期望catch子句能够捕获这个异常,并且打印I told you so。凑近仔细看看这个程序就会发现,Reluctant实例还包含第二个内部实例,它的构造器也会抛出一个异常。无论抛出哪一个异常,看起来main中的catch子句都应该捕获它,因此预测该程序将打印I told

JVM类加载机制

廉价感情. 提交于 2020-04-08 08:46:30
JVM类加载机制 JVM类加载机制分为:加载,验证,准备,解析,初始化五步,如 下图: 加载:这个阶段会在内存中生成一个代表这个类的java.lang.Class对象作为方法区这个类的各种数据的入口。 验证:目的去报Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机的自身安全。 准备:该阶段为类变量分配内存并设置类变量的初始值,即在 方法区中分配这些变量所使用的内存空间。 解析:指虚拟机将常量池中的符号引用替换为直接引用的过程(比如说方法的符号引用,是有方法名和相关描述符组成,在解析阶段,JVM把符号引用替换成一个指针,这个指针就是直接引用,它指向该类的该方法在方法区中的内存位置) 初始化:为类的静态变量赋予正确的初始值。当静态变量的等号右边的值是一个常量表达式时,不会调用static代码块进行初始化。只有等号右边的值是一个运行时运算出来的值,才会调用static初始化. 以下几种情况不会执行初始化操作 通过子类引用父类的静态字段,只会触发父类的初始化,而不会触发子类的初始化 定义对象数组,不会触发该类的初始化 常量在编译期间会存入调用类的常量池中,本质上并没有直接引用定义常量的类,不会触 发定义常量所在的类 通过类名获取Class 对象,不会触发类的初始化 通过Class.forName 加载指定类时,如果指定参数initialize 为false 时

JVM内容整合

爱⌒轻易说出口 提交于 2020-04-08 00:48:55
前言: JVM全称Java Virtual Machine是虚构的计算机,也是因此Java才可在各个系统平台运行,本文内容篇幅较长主要分为JVM整体流程,内存划分及组成以及JVM机制等方面进行介绍     一、JVM整体流程 一个java文件执行的大致步骤流程如下: 一张复杂的JVM架构图:   JVM加工类过程 加载 将class字节码文件加载进虚拟机,存储至元空间的方法区内 验证 文件格式验证 元数据验证 字节码验证 符号引用验证 准备 为类变量(static修饰)分配内存并设置初始值(指JVM默认值,例如:引用类型为null,int类型为0,不是类中指定的值) 如果类变量被final修饰,则直接赋类中定义的默认值(特殊情况:该final静态变量如果需要计算,会导致初始化) 成员变量(实例变量、属性、属于对象)不分配内存 解析 将常量池的符号引用转为直接引用(由于java为值传递,去掉了指针) 初始化 给类变量赋值(类中定义的默认值) 初始化静态语句块   相关题目测试 class GrandParent3{ static { System.out.println("GrandParent3静态代码块"); } } class Parent3 extends GrandParent3{ public final static String parent3="hello

**使用 Git Hook 实现网站的自动部署

自古美人都是妖i 提交于 2020-04-07 13:52:27
http://www.tuicool.com/articles/3QRB7jU 自动化能解放人类的双手,而且更重要的是,因为按照规定的流程来走,也减少了很多误操作的产生。不知道大家平时都是怎么样更新自己生产环境的代码的,FTP 覆盖旧文件、服务器定时任务去 build 最新的源码,还是有更高级的做法? 目前我在使用 Git Hook 来部署自己的项目。Git Hook 是 Git 提供的一个钩子,能被特定的事件触发后调用。其实,更通俗的讲,当你设置了 Git Hook 后,只要你的远程仓库收到一次 push 之后,Git Hook 就能帮你执行一次 bash 脚本。 下面是我使用 Git Hook 进行简单的自动化部署,可能还有更高级的做法,大家自己去挖掘。 在服务器初始化一个远程 Git 仓库 git init 和 git --bare init 初始化出来的仓库是完全不一样的,具体我 Google 了下,英文倒是理解了,但是要翻译出中文却不知道用什么形容词去称呼这2种仓库。 这里我们要通过 git --bare init 初始化一个远程仓库 $ cd ~ $ mkdir testRepo $ cd testRepo $ git --bare init 在服务器初始化一个本地 Git 仓库 这个仓库就是通过 git init 初始化出来最常见的本地仓库,它的作用是拉去远程仓库

Keil的c语言编译器

守給你的承諾、 提交于 2020-04-07 13:18:26
我曾经通过查看反汇编代码对KEILC编译器进行了测试,大概有这么一下内容,也得出一些结论。 (1) 全局变量 :如果程序中定义了全局变量,而且初始值不是0。此时,在程序调到main()函数执行前,除了要进行内存清零、初始化堆栈外,还需要将全局变量的初始值加载到内存的指定区域(编译过程中为全局变量分配的空间)。 (2) 局部变量 :局部变量通常使用那些缓冲内存(用作保存运算过程的中间数据)。初始化的局部变量,通常程序中都会对用到的缓冲内存重新赋值。 但是,对于没有初始化的局部变量需要注意“ 无知情的情况下被赋了值 ”。下边的子函数中定义了变量,但是并未初始化。按照标准C语言的准则,未初始化的变量的初值默认是0,但是KEIL对未初始化的局部变量的处理不是这样的。 void function() { unsigned char k,j; if (k<j) ; else { } } 实际的编译后的反汇编程序看不到对这些局部变量的初始化。这些局部变量可能会占据那些还未被使用的内存或者其他子函数中局部变量已经释放的空间(但是这些空间可能并没有清零)。倘若是后者,其他函数局部变量释放的空间由于并没有清零,所以这些局部变量就一开始被赋了不能预先知道的值,这是不希望看到的。所以如果使用一个局部变量,就给这个变量赋个初值。 (3)谨防程序在“ 无知情的情况下被优化 ”

利用Git Hook 实现代码自动部署

只愿长相守 提交于 2020-04-07 13:17:17
    Git Hook 是 Git 提供的一个钩子,能被特定的事件触发后调用。其实,更通俗的讲,当你设置了 Git Hook 后,只要你的远程仓库收到一次 push 之后,Git Hook 就能帮你执行一次 bash 脚本。 下面介绍通过 Git Hook 进行简单的自动化部署,至于更复杂的,需要大家自己去研究。 在服务器初始化一个远程 Git 仓库 mkdir example.git cd example.git git -bare init #创建裸版本库 在服务器初始化一个本地 Git 仓库 cd /export mkdir example cd example git init #初始化git git remote add origin /home/git/example.git #设置远程仓库 为远程仓库设置 Hook cd /home/git/example.git/hooks vim post-receive #!/bin/sh unset GIT_DIR NowPath=`pwd` DeployPath="/export/example" cd $DeployPath git pull origin master cd $NowPath exit 0 使用 chmod +x post-receive 改变一下权限后,服务器端的配置就基本完成了。 为本地仓库添加

不可逆的类初始化过程

徘徊边缘 提交于 2020-04-07 11:58:50
本文来自 PerfMa社区,欢迎关注公众号 链接: https://club.perfma.com/article/389071 类的加载过程说复杂很复杂,说简单也简单,说复杂是因为细节很多,比如说今天要说的这个,可能很多人都不了解;说简单,大致都知道类加载有这么几个阶段,loaded->linked->initialized,为了让大家能更轻松地知道我今天说的这个话题,我不详细说类加载的整个过程,改天有时间有精力了我将整个类加载的过程和大家好好说说(PS:我对类加载过程慢慢清晰起来得益于当初在支付宝做cloudengine容器开发的时候,当时引入了标准的osgi,解决类加载的问题几乎是每天的家常便饭,相信大家如果还在使用OSGI,那估计能体会我当时的那种痛,哈哈)。 本文我想说的是最后一个阶段,类的初始化,但是也不细说其中的过程,只围绕我们今天要说的展开。 我们定义一个类的时候,可能有静态变量,可能有静态代码块,这些逻辑编译之后会封装到一个叫做clinit的方法里,比如下面的代码: class BadClass{ private static int a=100; static{ System.out.println("before init"); int b=3/0; System.out.println("after init"); } public static void

Spring-MVC理解之:应用上下文webApplicationContext

Deadly 提交于 2020-04-07 11:38:06
一、先说ServletContext   javaee标准规定了,servlet容器需要在应用项目启动时,给应用项目初始化一个ServletContext作为公共环境容器存放公共信息。ServletContext中的信息都是由容器提供的。 举例: 通过自定义contextListener获取web.xml中配置的参数 1.容器启动时,找到配置文件中的context-param作为键值对放到ServletContext中 2.然后找到listener,容器调用它的contextInitialized(ServletContextEvent event)方法,执行其中的操作 例如:在web.xml中配置 <context-param> <param-name>key</param-name> <param-value>value123</param-value> </context-param> <listener> <listener-class>com.brolanda.contextlistener.listener.ContextListenerTest</listener-class> </listener> 配置好之后,在该类中获取对应的参数信息 package com.brolanda.contextlistener.listener; import javax

Mysql初始化root密码和允许远程访问

◇◆丶佛笑我妖孽 提交于 2020-04-07 08:38:53
1、初始化root密码 进入mysql数据库 mysql> update user set password = PASSWORD (‘123456’) where User = 'root' ; 允许mysql远程访问,可以使用以下三种方式: a、改表。 1 2 3 4 mysql -u root –p mysql>use mysql; mysql> update user set host = '%' where user = 'root' ; mysql> select host, user from user ; b、授权。 例如,你想root使用123456从任何主机连接到mysql服务器。 mysql> GRANT ALL PRIVILEGES ON *.* TO 'root' @ '%' IDENTIFIED BY '123456' WITH GRANT OPTION ; 如果你想允许用户jack从ip为10.10.50.127的主机连接到mysql服务器,并使用654321作为密码 mysql> GRANT ALL PRIVILEGES ON *.* TO 'jack' @’10.10.50.127’ IDENTIFIED BY '654321' WITH GRANT OPTION ; mysql>FLUSH PRIVILEGES c:在安装mysql的机器上运行: