main函数

C、C#、C++,三种语言的简单区分

不问归期 提交于 2020-02-26 16:31:56
一、C语言 #include <stdio.h> int main() { /* 我的第一个 C 程序 */ printf("Hello, World! \n"); return 0; } 二、C# using System; namespace HelloWorldApplication { /* 类名为 HelloWorld */ class HelloWorld { /* main函数 */ static void Main(string[] args) { /* 我的第一个 C# 程序 */ Console.WriteLine("Hello World!"); Console.ReadKey(); } } } 三、C++ #include <iostream> using namespace std; int main() { cout << "Hello, world!" << endl; return 0; } 来源: CSDN 作者: CaoMei_HuaCha 链接: https://blog.csdn.net/CaoMei_HuaCha/article/details/104514982

Tomcat 优雅关闭之路

会有一股神秘感。 提交于 2020-02-26 10:48:26
本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/ZqkmoAR4JEYr0x0Suoq7QQ 作者:马运杰 本文通过阅读Tomcat启动和关闭流程的源码,深入分析不同的Tomcat关闭方式背后的原理,让开发人员能够了解在使用不同的关闭方式时需要注意的点,避免因JVM进程异常退出导致的各种非预见性错误。 一、 Tomcat的启动过程 要了解Tomcat关闭的原理,首先需要关注下Tomcat是如何启动的。这里我们简单介绍下。 Tomcat启动的入口是Bootstrap类中的main方法,而后根据server.xml中的配置,对Server、Service、Enigin、Connector、Host、Context等组件进行初始化,之后便是启动这些组件。我们重点来看下启动之后,Tomcat做了哪些工作。 在Tomcat的各组件启动完毕之后,main主线程会进入Catalina.out的await()方法,而此方法又是主要调用了Server组件的await()方法,从名字便可以看出,这个方法的目的是为了阻塞当前线程(main主线程)。 分析await的源码(源码比较长,这里截取了部分,全部的可以自行拉取Tomcat源码进行阅读)。 (StandardServer.await()) 我们发现await()方法主要是根据server

C#课堂笔记(二)

烂漫一生 提交于 2020-02-26 10:07:28
C#基础 一、C#中的命名空间 C#程序中的一种代码组织形式,主要用来标识类的可见范围,使用namespace关键字定义命名空间。 在C#中,使用命名空间用using关键字。 二、类的概念 1.什么是类? 类是一种数据结构,存储数据成员,方法成员和其他类内容,便于调用。 2.定义类 使用class关键字定义类 三、C#中的关键字 1.C#中常用的关键字 四、C#中的标识符 1.什么是标识符? 类名、变量名、数组名、方法名(函数名)都是标识符 标识符实际上是按一定规则取的名字。 2.标识符命名规则 首字母 由字母和下划线组成 其余部分 可以由数字、字母下划线组成 标识符不可以与C#关键字冲突 标识符是区分大小写的 五、程序的启动器 - - -Main方法 C#程序分为命令行程序和可视化窗体程序,这两种程序的入口处都在Main方法。 1.Main方法的要求 Main方法必须定义为static Main方法的首字母必须大写 返回值只可以是void或int 命令行参数可选 2.Main方法常见的错误提示 没有Main方法 Main写成了main 没有用static 注意Main的返回值只可能有两种,void 和 int 程序中存在多个Main方法 解决办法: 在项目属性里修改默认启动对象 六、代码编写规则 1.基本规则 尽量使用接口编程 关键语句写注释 局部变量随用随声明

Android系统启动-Init篇

扶醉桌前 提交于 2020-02-26 09:38:40
copy from : http://gityuan.com/2016/02/05/android-init/ 基于Android 6.0的源码剖析, 分析Android启动过程进程号为1的init进程的工作内容 system/core/init/ - init.cpp - init_parser.cpp - signal_handler.cpp 一、概述 init进程是Linux系统中用户空间的第一个进程,进程号固定为1。Kernel启动后,在用户空间启动init进程,并调用init中的main()方法执行init进程的职责。对于init进程的功能分为4部分: 解析并运行所有的init.rc相关文件 根据rc文件,生成相应的设备驱动节点 处理子进程的终止(signal方式) 提供属性服务的功能 接下来从main()方法说起。 1.1 main [-> init.cpp] static int epoll_fd = -1; int main(int argc, char** argv) { ... //设置文件属性0777 umask(0); //初始化内核log,位于节点/dev/kmsg【见小节1.2】 klog_init(); //设置输出的log级别 klog_set_level(KLOG_NOTICE_LEVEL); //创建一块共享的内存空间,用于属性服务【见小节5.1

C++ Primer 5th 第11章 关联容器

一个人想着一个人 提交于 2020-02-25 20:43:28
练习11.1:描述map 和 vector 的不同。 map是关联容器,vector是顺序容器,关联容器与值无关,vector则与值密切相关 练习11.2:分别给出最适合使用 list、vector、deque、map以及set的例子。 list链表 vector动态数组 deque队列 map映射 set集合 练习11.3:编写你自己的单词计数程序。 #include <iostream> #include <map> void words_count() { std::map<std::string, std::size_t> m; std::string word; while (std::cin >> word) { ++m[word]; } } int main() { words_count(); return 0; } 练习11.4:扩展你的程序,忽略大小写和标点。例如,"example."、"example,"和"Example"应该递增相同的计数器。 #include <iostream> #include <map> void words_count() { std::map<std::string, std::size_t> m; std::string word; while (std::cin >> word) { for (auto& ch : word

Tomcat 优雅关闭之路

霸气de小男生 提交于 2020-02-25 19:49:37
本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/ZqkmoAR4JEYr0x0Suoq7QQ 作者:马运杰 本文通过阅读Tomcat启动和关闭流程的源码,深入分析不同的Tomcat关闭方式背后的原理,让开发人员能够了解在使用不同的关闭方式时需要注意的点,避免因JVM进程异常退出导致的各种非预见性错误。 一、 Tomcat的启动过程 要了解Tomcat关闭的原理,首先需要关注下Tomcat是如何启动的。这里我们简单介绍下。 Tomcat启动的入口是Bootstrap类中的main方法,而后根据server.xml中的配置,对Server、Service、Enigin、Connector、Host、Context等组件进行初始化,之后便是启动这些组件。我们重点来看下启动之后,Tomcat做了哪些工作。 在Tomcat的各组件启动完毕之后,main主线程会进入Catalina.out的await()方法,而此方法又是主要调用了Server组件的await()方法,从名字便可以看出,这个方法的目的是为了阻塞当前线程(main主线程)。 分析await的源码(源码比较长,这里截取了部分,全部的可以自行拉取Tomcat源码进行阅读)。 (StandardServer.await()) 我们发现await()方法主要是根据server

19.Go语言基础之并发

感情迁移 提交于 2020-02-25 15:32:04
1.1并发与并行 并发:同一时间段执行多个任务(使用微信和多个朋友聊天) 并行:同一时刻执行多个任务(windows中360在杀毒,同时你也在写代码) Go语言的并发通过goroutine实现。goroutine类似于线程,属于用户态的线程,我们可以根据需要创建成千上万个goroutine并发工作。 goroutine是由Go语言的运行时(runtime)调度完成,而线程是由操作系统调度完成。 Go语言还提供channel在多个goroutine间进行通信。goroutine和channel是Go语言秉承的CSP(Communication Sequential Process)并发模式的重要实现基础。 1.2goroutine 在java/Python中,我们实现并发编程的时候,通常需要自己维护一个线程池,并且需要自己去包装一个又一个的任务,同时需要自己去调度线程执行任务并维护上下文切换,这一切需要耗费很多。 Go语言中的goroutine,类似于线程,但goroutine是由Go的运行时(runtime)调度和管理的。Go程序能够只能的将goroutine中的任务合理的分配到每个CPU。Go语言被称为现代化语言的原因,就是因为Go在语言层面就已经内置了调度和上下文切换的机制。 在Go语言编程中,不需要自己写进程、线程、协程,你的技能只有一个,就是goroutine。 1.2

18.Go语言基础之反射

◇◆丶佛笑我妖孽 提交于 2020-02-25 15:25:33
1.变量的内在机制 Go语言中的变量是分为两部分的: 类型信息:预先定义好的元信息。 值信息:程序运行过程中可动态变化的。 2.反射介绍 在Python中,Java中,都有反射的概念。 反射是"指程序运行期对程序本身进行访问和修改的能力"。 程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。 支持反射的语言,可以再程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等正和岛可执行文件中,并给程序提供接口,访问反射信息,这样就可以在程序运行期获取类型的反射信息,并且有能力修改它们。 Go程序在运行期使用reflect包访问程序的反射信息。 上面我们介绍过空接口,空接口可以存储任意类型的变量,那我们怎样知道空接口保存的数据是什么呢?"反射就是在运行时动态的获取一个变量的类型信息和值信息。" 3.reflect包 在Go语言的反射机制中,任何接口都由"一个具体类型"和"具体类型的值"两部分组成。 在Go语言中反射的相关功能由内置的reflect包提供,任意接口值在反射中都可以理解为由reflect.Type和reflect.Value两部分组成,并且reflect包提供了reflect.TypeOf和reflect.ValueOf两个函数来获取任意对象的Value和Type。 3.1TypeOf 在Go语言中

Go 面向对象概念

≯℡__Kan透↙ 提交于 2020-02-24 17:34:13
前言: 本文是学习<<go语言程序设计>> -- 清华大学出版社(王鹏 编著) 的2014年1月第一版 做的一些笔记 , 如有侵权, 请告知笔者, 将在24小时内删除, 转载请注明出处! 1. 对象   - 任意简单的内置数据类型   - 任意复杂的结构体   - 表示具体的事物 / 抽象的规则 / 计划 / 事件 等. 2. 对象的状态   - 用数值来描述, 如长方体的长和宽等. 3. 对象的操作   - 用于改变对象的状态, 操作就是对象的行为.   - GO语言中称为Method(方法), Method 就是在 函数(function) 前面增加了一个接收者(Receiver)对象. 将操作和对象关联起来了.     - 定义: func ( recv receiver_type) methodName(args)(rets){} Receiver 可以是: 内置类型/自定义类型/结构体/指针类型     - 多个Method可以同名, 只要接收者不同, 就是不同的Method.(类似于重载吧)     - Method可以访问接收者的字段, 而不需要将字段作为参数传入Method, 就像在struct中访问字段一样.     - 普通类型作为Receiver,是值传递; 指针类型作为Receiver, 将传递引用. package main import ( "fmt"

scala编程(八)——函数和闭包

江枫思渺然 提交于 2020-02-24 15:25:28
当程序变得庞大时,你需要一些方法把它们分割成更小的,更易管理的片段。为了分割控制流, Scala 提供了所有有经验的程序员都熟悉的方式:把代码分割成函数。实际上, Scala 提供了许多 Java 中没有的定义函数的方式。除了作为对象成员函数的方法之外,还有内嵌在函数中的函数, 函数文本和函数值。本章带你体会所有 Scala 中的这些函数的风味。 方法 定义函数最通用的方法是作为某个对象的成员。这种函数被称为方法:method。 作为例子,示例代码 展示了两个可以合作根据一个给定的文件名读文件并打印输出所有长度超过给定宽度的行的 方法。每个打印输出的行前缀它出现的文件名: object LongLines { def processFile(filename: String, width: Int) { val source = Source.fromFile(filename) for (line <- source.getLines) processLine(filename, width, line) } private def processLine(filename:String, width:Int, line:String) { if (line.length > width) println(filename+": "+line.trim) } def main