main函数

Java并发高频面试题

雨燕双飞 提交于 2020-02-27 21:24:15
前面整理了Java基础、Mysql、Spring的高频面试题,今天为大家带来Java并发方面的高频面试题,因为并发知识不管在学习、面试还是工作过程中都非常非常重要,看完本文,相信绝对能助你一臂之力。 1、线程和进程有什么区别? 线程是进程的子集,一个进程可以有很多线程。每个进程都有自己的内存空间,可执行代码和唯一进程标识符(PID)。 每条线程并行执行不同的任务。不同的进程使用不同的内存空间(线程自己的堆栈),而所有的线程共享一片相同的内存空间(进程主内存)。别把它和栈内存搞混,每个线程都拥有单独的栈内存用来存储本地数据。 2、实现多线程的方式有哪些? 继承Thread类:Java单继承,不推荐; 实现Runnable接口:Thread类也是继承Runnable接口,推荐; 实现Callable接口:实现Callable接口,配合FutureTask使用,有返回值; 使用线程池:复用,节约资源; 更多方式可以参考我的文章使用Java Executor框架实现多线程 3、用Runnable还是Thread? 这个问题是上题的后续,大家都知道我们可以通过继承Thread类或者调用Runnable接口来实现线程,问题是,那个方法更好呢?什么情况下使用它?这个问题很容易回答,如果你知道Java不支持类的多重继承,但允许你调用多个接口。所以如果你要继承其他类

孤儿进程与僵尸进程[总结]

早过忘川 提交于 2020-02-27 17:12:09
今天遇到一个linux进程启动时指定Max open files不对的问题,导致程序建立socket异常,进而导致fullgc问题,影响正常服务。所以顺带又温习了下linux下的父子进程的特性。 孤儿进程与僵尸进程[总结] 1、前言   之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。 2、基本概念   我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。   孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。   僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程

GUI编程-图形用户界面编程

流过昼夜 提交于 2020-02-27 10:42:43
1、GUI简介 GUI的核心技术:Swing、AWT。 现在基本没人使用。 为什么学习GUI: 1、可以写一些小工具 2、工作时候,有可能需要维护到Swing界面 3、了解MVC架构,了解监听。 2、AWT(抽象的窗口工具) 包含了很多的类和接口。存在于java.awt包下。 元素:窗口、按钮、文本框…… 2.1、组件和容器 Frame(窗口) //gui的第一个界面 public class FrameTest { public static void main ( String [ ] args ) { Frame frame = new Frame ( "我的第一个gui窗口" ) ; //设置可见性 frame . setVisible ( true ) ; //设置窗口大小 frame . setSize ( 300 , 300 ) ; //设置背景颜色 frame . setBackground ( new Color ( 9 , 9 , 255 ) ) ; //设置弹出的初始位置 frame . setLocation ( 200 , 200 ) ; //设置窗口大小固定 frame . setResizable ( false ) ; //默认是true,不固定 false固定 } } 停止java程序,才可以关掉窗口。 public class

Go语言基础

﹥>﹥吖頭↗ 提交于 2020-02-27 09:25:26
概念 Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。 Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 语言特色 1.简洁、快速、安全 2.并行、有趣、开源 3.内存管理、数组安全、编译迅速 语言用途 Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。 对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。 语言优势 1.可直接编译成机器码,不依赖其他库,glibc的版本有一定要求,部署就是扔一个文件上去就完成了。 2.静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出来隐藏的大多数问题,动态语言的感觉就是有很多的包可以使用,写起来的效率很高。 3.语言层面支持并发,这个就是Go最大的特色,天生的支持并发。Go就是基因里面支持的并发,可以充分的利用多核,很容易的使用并发。 4.内置runtime,支持垃圾回收,这属于动态语言的特性之一吧

你好,Go

帅比萌擦擦* 提交于 2020-02-27 07:34:24
你好,Go Go语言是一门类似C语言的编译型语言,它的编译速度非常快。这门语言的关键字一共25个,比所有英文字母还少一个,这对于我们的学习来说非常有利。先让我们看一看这些关键字都长什么样。 break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var 本章中,笔者将带领你去学习Go语言的基础。通过每一小节的介绍,你将发现,Go语言的世界是多么简洁,设计是如此美妙,编写Go语言将会是一件愉快的事情。等回过头来,你就会发现这25个关键字是多么亲切。 在开始编写应用之前,我们先从最基本的程序开始。就像你造房子之前不知道什么是地基一样,编写程序也不知道如何开始。因此,在本节中,我们要学习用最基本的语法让Go语言程序运行起来。 程序 这就像一个传统,在学习大部分语言之前,你先学会如何编写一个可以输出Hello World的程序。 准备好了吗?让我们开始吧! package main import "fmt" func main() { fmt.Printf("Hello, world or 你好,世界 or καλημ ́ρα κóσμor

Python函数传参

穿精又带淫゛_ 提交于 2020-02-27 06:54:18
首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。 引用传递(pass-by-reference)过程中,被调函数的形式参数虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。 在python中实际又是怎么样的呢? 先看一个简单的例子: from ctypes import * import os . path import sys def test ( c ) : print "test before " print id ( c ) c += 2 print "test after +" print id ( c ) return c def printIt (

python3 多线程和多进程

对着背影说爱祢 提交于 2020-02-27 05:20:39
一.线程和进程 1.操作系统中,线程是CPU调度和分派的基本单位,线程依存于程序中 2.操作系统中,进程是系统进行资源分配和调度的一个基本单位,一个程序至少有一个进程 3.一个进程由至少一个线程组成,线程组成进程 4.多进程、多进程实际是进程、线程、进程和线程的并发而不是并行,用来加快程序运行速度 5.Python既支持多线程,也支持多进程。 二.多线程threading 1.python3线程操作中常用模块:_thread和threading,其中一般都用threading模块 2.线程分为: 内核线程: 由操作系统内核创建和撤销; 用户线程: 不需要内核支持而在用户程序中实现的线程 3.Python中使用线程有两种方式:函数或者用类来包装线程对象 2. 创建线程 1 import threading 2 3 #def main():#定义一个存放多线程的函数 4 # print(threading.active_count())#获取已激活的线程数 5 # print(threading.enumerate()) # see the thread list查询线程信息 6 # print(threading.current_thread())#查询当前运行的线程 7 8 def thread_job():#定义一个线程的工作的函数 9 print('This is a

WPF 用Main函数方式启动程序

依然范特西╮ 提交于 2020-02-27 02:40:08
WPF默认程序启动:新建project后自动生成的App.xaml中指定程序启动方式(StartupUri="MainWindow.xaml"),如下代码所示,启动MainWindow页面 <Application x:Class="MyFirstWPFApplication.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:MyFirstWPFApplication" StartupUri="MainWindow.xaml" > <Application.Resources> </Application.Resources> </Application> WPF用Main函数方式启动程序:自己写Main函数作为启动点 1.在WPF自动生成的App.cs文件中写Main函数 public partial class App : Application { [STAThread] static void Main() {       // 方式1 Application app = new Application();

C#委托的介绍(delegate、Action、Func、predicate)

ε祈祈猫儿з 提交于 2020-02-26 23:04:15
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。事件是一种特殊的委托。   1.委托的声明   (1). delegate delegate我们常用到的一种声明    Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型。    例:public delegate int MethodtDelegate(int x, int y);表示有两个参数,并返回int型。   (2). Action Action是无返回值的泛型委托。    Action 表示无参,无返回值的委托    Action<int,string> 表示有传入参数int,string无返回值的委托   Action<int,string,bool> 表示有传入参数int,string,bool无返回值的委托 Action<int,int,int,int> 表示有传入4个int型参数,无返回值的委托    Action至少0个参数,至多16个参数,无返回值。    例: public void Test<T>(Action<T> action,T p) { action(p); }   (3). Func    Func是有返回值的泛型委托    Func<int> 表示无参,返回值为int的委托    Func<object,string,int>

python __main__,类变量

匆匆过客 提交于 2020-02-26 18:38:30
python __main__中的变量是全局变量? main 函数内的变量不是全局变量,而是局部变量 只不过它的生命周期和全局变量一样长 全局变量一定是定义在函数外部的 如何理解python的 main ? 当.py文件被直接运行时, if __name__ == '__main__' 之下的代码块将被运行; 当.py文件以模块形式被导入时, if __name__ == '__main__' 之下的代码块不被运行。 如何区分类的全局变量和局部变量? class G(): fly = False #类中的全局变量 def __init__(self): selg._age = 1 #加一个下划线,是一种不成文的规定,意思是该变量是私有变量 self.long = 2 #普通变量 self.__width = 3 #有两个下划线,是一种“真”私有变量 def run(self): r = 4 #局部变量 print("I am running!.") 来源: https://www.cnblogs.com/zhanghaibin16/p/12367822.html