编译程序

02-02-08、JDK8的语法糖

风流意气都作罢 提交于 2020-04-05 19:12:24
​1、什么是语法糖 如果要来进行一个拆字游戏的话,语法糖可以拆分成“语法” 和 “糖”,每一种计算机语言都有自己的语法,Java也不例外。 语法就是在这一个语言中,要表示一种行为的表示模式,如赋值:int i = 666;如循环while(foo){},语法在一种语言的运行环境中是原生支持的,是体现在其运行时当中的。 糖是则是一种对于吃它的人来说感觉到甜的碳水化合物,往其他食物中加入糖会让食物变甜,吃糖能让人愉悦。 语法糖(Syntactic Sugar)就是给语法裹上一层糖,因此语法糖也称语法糖衣,让使用这些被裹上糖的语法的编码人员感觉到“甜”。例如,Java中使用for循环语法对一个集合进行遍历,写法为: int [] collection = new int [ 6 ]; for ( int i = 0 ; i < collection.length; i++){ // do something } 而现在,你只需要这么写就行: int [] collection = new int [ 6 ]; for ( int i : collection){ // do something } 是否内心会感到小小的“甜”呢。 有人会感觉很奇怪,我就是这么写的啊,这不就是Java的语法么?还说是什么语法糖!呸!~ 我们都知道,Java是一门高级语言,它的运行环境JVM执行的是字节码

acl 库

僤鯓⒐⒋嵵緔 提交于 2020-04-05 18:11:37
acl 库的功能参见文章 acl介绍 及 https://github.com/zhengshuxin/acl ,本文主要讲述如何编译和使用 acl 库。 acl 下其实有四个库:lib_acl (基础库)、lib_protocol(http 和 icmp 协议库)、lib_acl_cpp(封装了 lib_acl 和 lib_protocol 两个 C 库的 C++ 版本实现,更是增加了丰富的功能)、lib_dict(封装了 bdb, cdb, Tokyo Cabinet 库的用于字典查询的库)以及 lib_tls(封装了openssl部分功能的库,主要用于 lib_acl 的 ssl 加密传输)。其中,笔者用的最多还是 lib_acl 、lib_protocol 以及 lib_acl_cpp(目前用得最多的库)三个库,所以本文主要介绍这三个库的编译与使用。 开始时 acl 库是支持 Linux、Solaris、FreeBSD 和 Windows 平台的,其它几个平台欢迎读者进行移植。 一、Linux/UNIX 平台上编译(需要使用 gcc/g++编译器及 gnu make 命令) 1、编译 lib_acl.a 库(使用 gcc 编译器) 进入 lib_acl 目录,直接运行 make,正常情况下便可在 lib 目录下生成 lib_acl.a 静态库,用户在使用 lib_acl.a

转载Makefile学习教程

邮差的信 提交于 2020-04-05 15:38:27
该篇文章为转载,是对原作者系列文章的总汇加上标注。 支持原创,请移步陈浩大神博客: http://blog.csdn.net/haoel/article/details/2886 makefile很重要 什么是 makefile ?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了, 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力 。 因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按 类型、功能、模块 分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具

项目实战---在线OJ

我的梦境 提交于 2020-04-04 22:33:55
在线OJ 项目功能 :类似于LeetCode及牛客网的在线答题系统,浏览器请求服务器可以获得所有试题信息,包括题目编号、题目名称、题目难度,用户可以选择某一道题进行作答,服务器返回题目描述信息以及预定义好的代码模板,用户编写完代码后浏览器将用户提交的代码返回给服务器,服务器将用户提交的代码与预定义好的题目测试用例结合编译运行,并将结果返回给浏览器告知用户通过率。 上述的功能依赖于几个模块相互配合实现,如下图 接下来就对这几个模块详细的介绍 1.试题模块 在本地创建一个目录保存所有的试题,描述某一道试题时将试题编号、试题名称、试题所在路径、试题难度通过结构体组织起来,试题所在路径中保存着这道题目的描述(desc.txt)、这道题的预定义代码(header.cpp)以及这道题的测试代码(tail.cpp) class Exam { public: std::string _id; std::string _name; std::string _path; std::string _star;//试题难度 }; 所有试题通过unordered_map保存,通过题目编号就可以在unordered_map中得到该试题的所有信息,这样也使查询效率最高。 当浏览器请求所有试题时,试题模块遍历整个unordered_map拿到所有试题信息,然后通过渲染模块返回给浏览器

玩转 Nginx 之:使用 Lua 扩展 Nginx 功能

北慕城南 提交于 2020-04-04 21:39:28
https://my.oschina.net/leejun2005/blog/494248 https://github.com/iresty/nginx-lua-module-zh-wiki 1、Nginx 简介 Nginx 作为一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。其流行度越来越高,应用也越来越广泛,常见的应用有:网页服务器、反向代理服务器以及电子邮件(IMAP/POP3)代理服务器,高并发大流量站点常用来做接入层的负载均衡,还有非常常见的用法是作为日志采集服务器等。 Nginx 整体采用模块化设计,有丰富的模块库和第三方模块库,配置灵活。其中模块化设计是nginx的一大卖点,甚至http服务器核心功能也是一个模块。要注意的是:nginx的模块是静态的,添加和删除模块都要对nginx进行重新编译,这一点与Apache的动态模块完全不同。不过后来淘宝做了二次开发开源的 tengine 是支持 官方所有的 HTTP 模块动态加载而不必重新编译 Nginx,除非是第三方模块才需要重新编译。因此,在生产环境中,推荐用淘宝开源的 tengine,本文也以 tengine 作为示例。 虽然 Nginx 有如此强大的性能以及众多的三方模块支持,但每次重新编译以及寻找三方模块对生产环境来说还是不可接受的,幸运的是,Nginx

玩转 Nginx 之:使用 Lua 扩展 Nginx 功能

可紊 提交于 2020-04-04 21:35:35
https://my.oschina.net/leejun2005/blog/494248 https://github.com/iresty/nginx-lua-module-zh-wiki 1、Nginx 简介 Nginx 作为一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。其流行度越来越高,应用也越来越广泛,常见的应用有:网页服务器、反向代理服务器以及电子邮件(IMAP/POP3)代理服务器,高并发大流量站点常用来做接入层的负载均衡,还有非常常见的用法是作为日志采集服务器等。 Nginx 整体采用模块化设计,有丰富的模块库和第三方模块库,配置灵活。其中模块化设计是nginx的一大卖点,甚至http服务器核心功能也是一个模块。要注意的是:nginx的模块是静态的,添加和删除模块都要对nginx进行重新编译,这一点与Apache的动态模块完全不同。不过后来淘宝做了二次开发开源的 tengine 是支持 官方所有的 HTTP 模块动态加载而不必重新编译 Nginx,除非是第三方模块才需要重新编译。因此,在生产环境中,推荐用淘宝开源的 tengine,本文也以 tengine 作为示例。 虽然 Nginx 有如此强大的性能以及众多的三方模块支持,但每次重新编译以及寻找三方模块对生产环境来说还是不可接受的,幸运的是,Nginx

SpringBoot零基础入门指南2--在idea中用tomcat发布项目

会有一股神秘感。 提交于 2020-04-04 19:48:29
在idea中用tomcat发布项目 使用SpringBoot启动程序,虽然速度快,但是不易调试,因此在开发中还是使用tomcat进行程序发布 1、修改pom.xml文件 <packaging>jar</packaging> ——》<packaging>war</packaging> 并添加热部署依赖 <!--开发人员工具--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId>        <scope>runtime</scope> </dependency> 重新导入 另外还可以添加一些编译配置,以便控制编译的JDK版本,减少版本的兼容的问题,此处不是必须。 在<properties>内部添加 <plugin.mybatis.generator>1.3.1</plugin.mybatis.generator> <plugin.maven-compiler>3.1</plugin.maven-compiler> <plugin.maven-surefire>2.18.1</plugin.maven-surefire> <skipTests>true</skipTests> 在<plugins>内部添加 <plugin>

了解GO

谁都会走 提交于 2020-04-04 19:19:15
了解GO Go语言 Go是一种新的语言,一种并发的,带垃圾回收的、快速编译的语言 可以在一台计算机上用几秒钟的事件编译一个大型的Go程序 使依赖更容易分析,避免了大部分C风格include文件与库的开头 静态类型语言,类型系统没有层级 垃圾回收型语言,并为并发执行与通信提供了基本支持 Windows安装 根据电脑选择msi安装包,不要修改默认安装目录C:\GO\ 在cmd中输入Go,检查能否看到usage信息;输入 cd %GOROOT% ,看是否能进入Go安装目录;若都成功,说明安装成功。 Go命令 go build :主要用于编译代码。在包的编译过程中,若有必要,会同时编译与之相关联的包 go clean :用于移除当前源码包和关联源码包里面编译生成的文件。一般可以利用这个命令清除编译文件,然后github递交源码,在本机测试时这些编译文件都是和系统相关的,但是对于源码管理来说没必要。 go fmt :用于格式化写好的代码 go get :动态获取远程代码包 go install :这个命令在内部分为两步:第一步生成结果文件,第二步把编译好的结果移到$GOPATH/pkg 或者 $GOPATH/bin go test :自动读取*_test.go的文件,生成并运行测试用的可执行文件 go env :查看当前GO的环境变量 go list :列出当前全部安装的package go

Java面向对象三大特征

一曲冷凌霜 提交于 2020-04-04 17:52:22
封装 封装的好处 1、封装之后,复杂的事物被“包起来”了。复杂性封装,对外提供简单的操作入口。比如照相机,照相机内部结构、实现原理都很复杂,然而对于使用者就很简单。 2、封装之后才会形成真正的“对象”,真正的“独立体”。 3、封装意味着以后的程序可以重复使用,并且这个事物应该适应性比较强,在任何场合都适用。 4、封装之后,对于事物本身,提高了安全性【安全级别高】。 封装的步骤 1、所有属性私有化,使用private关键字进行修饰,private表示私有的,修饰的所有数据只能在本类中访问。(例子:private int age,age属性私有化,在外部程序不能直接访问) 2、对外提供简单的操作入口,也就是说以后外部程序要想访问age属性,必须通过这些简单的入口进行访问。(属性的访问形式:读取属性的值(get);修改属性的值(set)。) 3、对外提供两个公开的方法,分别是set方法和get方法:想修改属性,调用set方法;想读取属性,调用get方法。 4、set方法的命名规范: public void set+属性名首字母大写(形参){ 安全控制; Java代码; } 例子: public void setAge(int a){ if(a<0 || a>150){ return; } age = a; } get方法的命名规范: public 参数类型 get+属性名首字母大写(){

C#动态编译、执行代码

谁说我不能喝 提交于 2020-04-04 07:47:14
在开始之前,先熟悉几个类及部分属性、方法: CSharpCodeProvider 、 ICodeCompiler 、 CompilerParameters 、 CompilerResults 、 Assembly 。 一、CSharpCodeProvider 提供对C#代码生成器和代码编译器的实例的访问。如果要动态生成VB代码,可以使用 VBCodeProvider 。 CreateCompiler():获取编译器的实例。 二、ICodeCompiler 定义用于调用源代码编译的接口或使用指定编译器的 CodeDOM 树。每种编译方法都接受指示编译器的 CompilerParameters 对象,并返回指示编译结果的CompilerResults对象。 CompilerAssemblyFromSource(CompilerParameters option, string source):使用指定的编译器,从包含源代码的字符串设置编译程序集。 三、CompilerParameters 表示用于调用编译器的参数。 ReferencedAssemblies:获取当前项目所引用的程序集。Add方法为程序集添加引用。 GenerateExecutable:获取或设置一个值,该值指示是否生成可执行文件。若此属性为false,则生成DLL,默认是false。 GenerateInMemory