静态函数

JVM init和cinit的理解

微笑、不失礼 提交于 2019-11-28 18:51:52
JVM的类加载机制中,准备阶段和初始化阶段尤为重要,在程序设计中有时候起到至关重要的作用。因此今天来根据一个例子来讲解JVM中<init>和<cinit>的过程。 吊炸天的Java题目,请问输出结果是什么? public class JavaTest { public static void main(String[] args){ f1(); } static JavaTest javaTest = new JavaTest(); static { System.out.println("1"); } { System.out.println("2"); } JavaTest(){ System.out.println("3"); System.out.println("a=" + a + ", b=" + b); } public static void f1(){ System.out.println("4"); } int a = 100; static int b = 200; } 先给出正确答案: 2 3 a=100, b=0 1 4 init和clinit区别 ①init和clinit方法执行时机不同 init是对象构造器方法,也就是说在程序执行 new 一个对象调用该对象类的 constructor 方法时才会执行init方法,而clinit是类构造器方法

17-静态字段和静态方法

时光怂恿深爱的人放手 提交于 2019-11-28 17:47:50
静态字段和静态方法 在一个class中定义的字段,称为实例字段。每个实例都有独立的字段,各个实例的同名字段互不影响。用static修饰的字段,称为静态字段:static field。 实例字段在每个实例中都有自己的一个独立“空间”,但是静态字段只有一个共享“空间”,所有该类的实例或继承该类的实例都会共享该字段,无论修改哪个实例的静态字段,所有实例的静态字段都被修改了。 public class Main { public static void main(String[] args) { Person ming = new Student("Xiao Ming", 12); Person hong = new Student("Xiao Hong", 15); ming.number = 88;//修改ming实例中的numbr字段 System.out.println(hong.number);//输出hong实例中的humbr字段 hong.number = 99; System.out.println(ming.number); } } abstract class Person {//静态字段定义的类 public String name; public int age; public static int number; } class Student extends

linux项目部署(非前后端分离crm)

别等时光非礼了梦想. 提交于 2019-11-28 17:09:30
参考博客 一.crm项目部署(非前后端分离项目) 1.项目部署技术栈 nginx + uwsgi + django + 虚拟环境 + supervisor + mysql 2.面试题1 django的启动方式 python3 manage.py runserver 为什么不能在生产环境用? django只是一个web逻辑框架,它通过python3 manage.py runserver命令启动的socket服务端 是借助python内置的wsgi框架 wsgiref框架实现的 wsgi是一个单机模块,单进程模块,性能很低,用wsgi来启动一个多线程、多进程的项目是不合适的 因此在线上需要借助通过c语言编写的uwsgi这个web服务器软件,启动djangouwsgi支持多进程 多线程的方式,性能很高,启动django性能更好,但是uwsgi不解析django的静态文件 3.面试题2 为什么要用nginx 和uwsgi? nginx 可以解决uwsgi的静态文件问题,并且支持高并发请求,还能限流,保障后台服务器安全等等 为什么要用uwsgi 因为uwsgi支持多进程 多线程的方式,性能很高,启动django性能更好,但是uwsgi不解析django的静态文件 我们以后会收集所有的django项目静态文件,丢给nginx去处理 4.准备crm代码 5.进入第一层路径,查看wsgi

网页静态化技术Freemaker

大憨熊 提交于 2019-11-28 13:20:19
主要是为了从后台抓数据,生成一个静态页面,   网络静态化技术和缓存技术的共同点都是为了减轻数据库的访问压力,具体应用的场景不同,缓存表叫适合小规模的数据,网页静态化比较适合大规模且相对变化不频繁的数据,网页静态化有利于SEO(搜索引擎的优化,网络营销)   将网页以纯静态化的形式展现,要使用Nginx这样的高性能的web服务器来部署,Nginx可以承载5W并发量,tomcat只有几百 Freemarker:   用java语言编写的模板引擎   模板文件四种元素   1、文本,直接输出的部分   2、注释,即<#--...-->格式不会输出   3、插值(Interpolation):即${..}部分,将使用数据模型中的部分替代输出,类似EL表达式   4、FTL指令:FreeMarker指令,和HTML标记类似,名字前加#予以区分,不会输出。 一、导入依赖 <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version> </dependency> 二、java程序 public static void main(String[] args) throws Exception { { //创建配置类,参数当期那版本号

C语言--static变量及其作用

允我心安 提交于 2019-11-28 12:52:53
  在 C 语言中,static 关键字不仅可以用来修饰变量,还可以用来修饰函数。在使用 static 关键字修饰变量时,我们称此变量为静态变量。   静态变量的存储方式与全局变量一样,都是静态存储方式。但这里需要特别说明的是,静态变量属于静态存储方式,属于静态存储方式的变量却不一定就是静态变量。例如,全局变量虽然属于静态存储方式,但并不是静态变量,它必须由 static 加以定义后才能成为静态全局变量。 隐藏与隔离的作用   上面已经阐述过,全局变量虽然属于静态存储方式,但并不是静态变量。全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,全局变量在各个源文件中都是有效的。   如果我们希望全局变量仅限于在本源文件中使用,在其他源文件中不能引用,也就是说限制其作用域只在定义该变量的源文件内有效,而在同一源程序的其他源文件中不能使用。这时,就可以通过在全局变量之前加上关键字 static 来实现,使全局变量被定义成为一个静态全局变量。这样就可以避免在其他源文件中引起的错误。也就起到了对其他源文件进行隐藏与隔离错误的作用,有利于模块化程序设计。 保持变量内容的持久性   有时候,我们希望函数中局部变量的值在函数调用结束之后不会消失,而仍然保留其原值。即它所占用的存储单元不释放,在下一次调用该函数时,其局部变量的值仍然存在,也就是上一次函数调用结束时的值。这时候

Roslyn 入门:使用 Roslyn 静态分析现有项目中的代码

微笑、不失礼 提交于 2019-11-28 12:23:10
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/WPwalter/article/details/79616402 Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性。以至于我们只需要编写很少量的代码便能够分析我们的项目文件。 作为 Roslyn 入门篇文章,你将可以通过本文学习如何开始编写一个 Roslyn 扩展项目,如何开始分析一个解决方案(.sln)中项目(.csproj)的代码文件(.cs)。 本文是 Roslyn 入门系列之一: Roslyn 入门:使用 Visual Studio 的语法可视化(Syntax Visualizer)窗格查看和了解代码的语法树 Roslyn 入门:使用 .NET Core 版本的 Roslyn 编译并执行跨平台的静态的源码 Roslyn 入门:使用 Roslyn 静态分析现有项目中的代码(本文) 如果你希望真实地静态分析一个实际项目,并且理解这样的分析过程是如何进行的(而不只是写个 demo),那么本文的所有内容都将是必要的。 准备工作 为了能够进行后面关键的操作,我们需要先有一个能跑起来的项目。 ▲ 在 Visual Studio 新建项目,选择“控制台程序(.NET Framework)” 在目前({%

云计算面试题及答案,AWS云计算面试题

╄→尐↘猪︶ㄣ 提交于 2019-11-28 11:23:52
如今,越来越多的人通过 AWS 来入门云计算。很多初学者都迫切地想要知道如何才能成为一名 Linux 管理员,于是我想通过本文详细介绍一下云计算的相关知识,希望能够借此来解答开发者心中的疑问。本文既包括 AWS 的基础知识,又包括复杂架构的自动化部署这样的高级操作。读者可以根据自己的背景和基础,选择自己感兴趣的部分阅读。 开始之前,我先假设你具备以下能力: 拥有初级或者中级的 Linux 系统管理技能。 至少熟悉一门编程语言或者脚本语言。不必特别精通,但是要有实际的编程经历。 愿意花时间去解决一些复杂的问题。 需要花费一点钱购买 AWS 服务,从而提高自己的技能。 本指南使用须知: 首先,本指南不会一步一步手把手地教你如何操作。 我会循序渐进地引导你。因此,你需要真正理解每一部分,然后再阅读下一部分。 遇到问题时你要善用谷歌搜索、AWS 文档以及 Stack Overflow 网站去寻找答案。 使用最正确的方式,不要只顾图快。当然,先用快速的方法完成,然后再进行重构也未尝不可。 在学习过程中充分理解之后再去服务器上进行实际操作。使用不到 50 美元的 AWS 版本即可完成本指南中的所有工作。重新构建的过程能够帮助你加深理解。 跳过开头先去阅读“成本分析”和“自动化”两部分的内容,阅读其他部分的时候保证这两部分的内容了然于胸。 最后,一定要多动手进行实际操作。此时不做,更待何时。

方法引用

旧时模样 提交于 2019-11-28 11:07:54
1.什么是方法引用 方法引用是java8中特定情况下简化lambada表达式的一种语法糖,这里的特定情况是指当调用现有的方法时可以用方法引用替代lambada表达式,其他情况下,则不可以替代。 举个栗子: public class MethodReferenceTest { public static void main(String[] args) { List<String> city = Arrays.asList("beijing","shanghai","tianjin","wuhan"); //使用lambada表达式遍历 city.forEach(i -> System.out.println(i)); //使用方法引用 city.forEach(System.out::println); } } 以上使用lambada表达式和方法引用的效果是等价的,但是方法引用看着要更加简洁一些,其实方法引用可以看做是函数指针(虽然java没有指针的概念),一个指向现有的函数的指针。 方法引用左右使用“::”双冒号隔开,左边是具体的类,右面是调用的具体的方法。上面的out实际上是System类中的一个PrintStream类型的常量(声明为final),PrintStream是java中的一个类,上面“::”右边的println方法就在这个类中定义,这个类中除了println方法

Lambda表达式与方法引用

ε祈祈猫儿з 提交于 2019-11-28 10:43:23
1 Lambda表达式 1.1 函数式编程思想概述 在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿数据做数据” 面向对象思想强调“必须通过对象的形式来做事情” 函数式思想则尽量忽略面向对象的复杂语法:“强调做什么,而不是以什么形式去做” 而我们要学的Lambda表达式就是函数式思想的体现 1.2 体验Lambda表达式 需求 :启动一个线程,在控制台输出一句话:多线程程序启动了 方式1: 定义一个类MyRunnable实现Runnable接口,重写run()方法 创建MyRunnable类的对象 创建Thread类的对象,把MyRunnable的对象作为构造参数传递 启动线程 // MyRunnable类实现了Runnable接口 public class MyThread implements Runnable{ @Override public void run() { System.out.println("多线程程序启动了"); } } // Test类 public class Test { public static void main(String[] args) { MyThread myThread = new MyThread(); Thread thread = new Thread(myThread,"Yuki"); thread.start(

Java面向对象(二)_封装、static、继承、多态、抽象、接口

非 Y 不嫁゛ 提交于 2019-11-28 07:23:57
备注:如有错误请给予联系 1. 面向对象的封装特性 在面向对象程式设计方法中,封装(英语: Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。 要访问该类的代码和数据,必须通过严格的接口控制。 封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。 适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。 封装的优点 1. 良好的封装能够减少耦合。 2. 类内部的结构可以自由修改。 3. 可以对成员变量进行更精确的控制。 4. 隐藏信息,实现细节。 实现 Java封装的步骤 1. 修改属性的可见性来限制对属性的访问(一般限制为private),例如: 1 public class Person { 2 private String name; 3 private int age; 4 } 这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问, 其他类都访问不了,如此就对信息进行了隐藏。 2. 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如: 1 public class Person{ 2 private String name; 3 private int age;