精华内容
下载资源
问答
  • 应用程序就是可执行软件 比如说QQ office .exe .bat文件都可以叫做应用程序 在一个应用程序中都会有个进程 什么是进程? 1.进程中有多个不同执行路径,多个线程集合。 2.进程是执行中程序 3.一个操作...

    说起线程和进程 这里就要说下应用程序

    什么是应用程序?

    应用程序就是可执行的软件 比如说QQ office .exe .bat文件都可以叫做应用程序

    在一个应用程序中都会有个进程

    什么是进程?

    1.进程中有多个不同的执行路径,多个线程的集合。

    2.进程是执行中的程序

    3.一个操作系统可以有多个进程

    总结:进程就是正在运行的程序,是线程的集合。

    在进程中程序代码是怎么执行的,代码的执行顺序靠那个线程?

    在进程中,一定有一个线程,这个线程就是把主线程 java中的main函数就是主线程

    什么是线程?

    线程是一个执行顺序(执行路径),或者是一个执行流程。

    总结:线程就是正在独立运行的一条执行路径

    什么是多线程?多线程的作用是什么

    总结:多线程就是有多条执行路径(线程与线程之间都是独立运行的互不干扰) 作用是提高程序的运行效率 

     

    展开全文
  • 今天仿写一个绑定ip和mac的批处理,然后运行到ipconfig时总是提示“另一个程序正在使用此文件,...结果最后发现原因该批处理文件的文件名和系统命令重名了(顺手给批处理起名叫ipconfig.bat了),随便改个名就好了=_=
    今天仿写一个绑定ip和mac的批处理,然后运行到ipconfig时总是提示“另一个程序正在使用此文件,进程无法访问”,搜了各种方法,什么win7下的权限之类的都无效。结果最后发现原因是该批处理文件的文件名和系统命令重名了(顺手给批处理起名叫ipconfig.bat了),随便改个名就好了=_=
    
    展开全文
  • Java虚拟机一个可以执行Java字节码虚拟机进程。Java源文件被编译成能被Java虚拟机执行字节码文件。 Java被设计成允许应用程序可以运行在任意平台,而不需要程序员为每一个平台单独重写或者重新编译。Java...

    本文转载自:BAT面试必问的23道JVM面试题解析,我猜你最多能回答3道!


    1. 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?

    Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。 Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。

    2. Java内存结构

    方法区和堆是所有线程共享的内存区域;而java栈、本地方法栈和程序员计数器是运行是线程私有的内存区域。

    • Java堆(Heap),是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。
    • 方法区(Method Area),方法区(Method Area)与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
    • 程序计数器(Program Counter Register),程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。
    • JVM栈(JVM Stacks),与程序计数器一样,Java虚拟机栈(Java Virtual Machine Stacks)也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作栈、动态链接、方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
    • 本地方法栈(Native Method Stacks),本地方法栈(Native Method Stacks)与虚拟机栈所发挥的作用是非常相似的,其区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的Native方法服务。

    3. 解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法

    通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用JVM中的栈空间;而通过new关键字和构造器创建的对象则放在堆空间,堆是垃圾收集器管理的主要区域,由于现在的垃圾收集器都采用分代收集算法,所以堆空间还可以细分为新生代和老生代,再具体一点可以分为Eden、Survivor(又可分为From Survivor和To Survivor)、Tenured;方法区和堆都是各个线程共享的内存区域,用于存储已经被JVM加载的类信息、常量、静态变量、JIT编译器编译后的代码等数据;程序中的字面量(literal)如直接书写的100、"hello"和常量都是放在常量池中,常量池是方法区的一部分,。栈空间操作起来最快但是栈很小,通常大量的对象都是放在堆空间,栈和堆的大小都可以通过JVM的启动参数来进行调整,栈空间用光了会引发StackOverflowError,而堆和常量池空间不足则会引发OutOfMemoryError。

    String str = new String("hello");
    

    上面的语句中变量str放在栈上,用new创建出来的字符串对象放在堆上,而"hello"这个字面量是放在方法区的。

    补充1:较新版本的Java(从Java 6的某个更新开始)中,由于JIT编译器的发展和"逃逸分析"技术的逐渐成熟,栈上分配、标量替换等优化技术使得对象一定分配在堆上这件事情已经变得不那么绝对了。

    补充2:运行时常量池相当于Class文件常量池具有动态性,Java语言并不要求常量一定只有编译期间才能产生,运行期间也可以将新的常量放入池中,String类的intern()方法就是这样的。 看看下面代码的执行结果是什么并且比较一下Java 7以前和以后的运行结果是否一致。

    String s1 = new StringBuilder("go")
        .append("od").toString();
    System.out.println(s1.intern() == s1);
    String s2 = new StringBuilder("ja")
        .append("va").toString();
    System.out.println(s2.intern() == s2);
    

    4. 对象分配规则

    • 对象优先分配在Eden区,如果Eden区没有足够的空间时,虚拟机执行一次Minor GC。
    • 大对象直接进入老年代(大对象是指需要大量连续内存空间的对象)。这样做的目的是避免在Eden区和两个Survivor区之间发生大量的内存拷贝(新生代采用复制算法收集内存)。
    • 长期存活的对象进入老年代。虚拟机为每个对象定义了一个年龄计数器,如果对象经过了1次Minor GC那么对象会进入Survivor区,之后每经过一次Minor GC那么对象的年龄加1,知道达到阀值对象进入老年区。
    • 动态判断对象的年龄。如果Survivor区中相同年龄的所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象可以直接进入老年代。
    • 空间分配担保。每次进行Minor GC时,JVM会计算Survivor区移至老年区的对象的平均大小,如果这个值大于老年区的剩余值大小则进行一次Full GC,如果小于检查HandlePromotionFailure设置,如果true则只进行Monitor GC,如果false则进行Full GC。

    5. 什么是类的加载

    类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。

    6. 类加载器

    • 启动类加载器:Bootstrap ClassLoader,负责加载存放在JDK\jre\lib(JDK代表JDK的安装目录,下同)下,或被-Xbootclasspath参数指定的路径中的,并且能被虚拟机识别的类库
    • 扩展类加载器:Extension ClassLoader,该加载器由sun.misc.Launcher$ExtClassLoader实现,它负责加载DK\jre\lib\ext目录中,或者由java.ext.dirs系统变量指定的路径中的所有类库(如javax.*开头的类),开发者可以直接使用扩展类加载器。
    • 应用程序类加载器:Application ClassLoader,该类加载器由sun.misc.Launcher$AppClassLoader来实现,它负责加载用户类路径(ClassPath)所指定的类,开发者可以直接使用该类加载器

    7. 描述一下JVM加载class文件的原理机制?

    JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。 由于Java的跨平台性,经过编译的Java源程序并不是一个可执行程序,而是一个或多个类文件。当Java程序需要使用某个类时,JVM会确保这个类已经被加载、连接(验证、准备和解析)和初始化。类的加载是指把类的.class文件中的数据读入到内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的Class对象。加载完成后,Class对象还不完整,所以此时的类还不可用。当类被加载后就进入连接阶段,这一阶段包括验证、准备(为静态变量分配内存并设置默认的初始值)和解析(将符号引用替换为直接引用)三个步骤。最后JVM对类进行初始化,包括:1)如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;2)如果类中存在初始化语句,就依次执行这些初始化语句。 类的加载是由类加载器完成的,类加载器包括:根加载器(BootStrap)、扩展加载器(Extension)、系统加载器(System)和用户自定义类加载器(java.lang.ClassLoader的子类)。从Java 2(JDK 1.2)开始,类加载过程采取了父亲委托机制(PDM)。PDM更好的保证了Java平台的安全性,在该机制中,JVM自带的Bootstrap是根加载器,其他的加载器都有且仅有一个父类加载器。类的加载首先请求父类加载器加载,父类加载器无能为力时才由其子类加载器自行加载。JVM不会向Java程序提供对Bootstrap的引用。下面是关于几个类加载器的说明:

    • Bootstrap:一般用本地代码实现,负责加载JVM基础核心类库(rt.jar);
    • Extension:从java.ext.dirs系统属性所指定的目录中加载类库,它的父加载器是Bootstrap;
    • System:又叫应用类加载器,其父类是Extension。它是应用最广泛的类加载器。它从环境变量classpath或者系统属性java.class.path所指定的目录中记载类,是用户自定义加载器的默认父加载器。

    8. 描述一下JVM加载class文件的原理机制?

    JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。

    由于Java的跨平台性,经过编译的Java源程序并不是一个可执行程序,而是一个或多个类文件。当Java程序需要使用某个类时,JVM会确保这个类已经被加载、连接(验证、准备和解析)和初始化。类的加载是指把类的.class文件中的数据读入到内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的Class对象。加载完成后,Class对象还不完整,所以此时的类还不可用。当类被加载后就进入连接阶段,这一阶段包括验证、准备(为静态变量分配内存并设置默认的初始值)和解析(将符号引用替换为直接引用)三个步骤。最后JVM对类进行初始化,包括:

    • 如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;
    • 如果类中存在初始化语句,就依次执行这些初始化语句。

    类的加载是由类加载器完成的,类加载器包括:根加载器(BootStrap)、扩展加载器(Extension)、系统加载器(System)和用户自定义类加载器(java.lang.ClassLoader的子类)。

    从Java 2(JDK 1.2)开始,类加载过程采取了父亲委托机制(PDM)。PDM更好的保证了Java平台的安全性,在该机制中,JVM自带的Bootstrap是根加载器,其他的加载器都有且仅有一个父类加载器。类的加载首先请求父类加载器加载,父类加载器无能为力时才由其子类加载器自行加载。JVM不会向Java程序提供对Bootstrap的引用。下面是关于几个类加载器的说明:

    • Bootstrap:一般用本地代码实现,负责加载JVM基础核心类库(rt.jar);
    • Extension:从java.ext.dirs系统属性所指定的目录中加载类库,它的父加载器是Bootstrap;
    • System:又叫应用类加载器,其父类是Extension。它是应用最广泛的类加载器。它从环境变量classpath或者系统属性java.class.path所指定的目录中记载类,是用户自定义加载器的默认父加载器。

    9. Java对象创建过程

    1. JVM遇到一条新建对象的指令时首先去检查这个指令的参数是否能在常量池中定义到一个类的符号引用。然后加载这个类(类加载过程在后边讲)
    2. 为对象分配内存。一种办法“指针碰撞”、一种办法“空闲列表”,最终常用的办法“本地线程缓冲分配(TLAB)”
    3. 将除对象头外的对象内存空间初始化为0
    4. 对对象头进行必要设置

    10. 类的生命周期

    类的生命周期包括这几个部分,加载、连接、初始化、使用和卸载,其中前三部是类的加载的过程,如下图

    • 加载,查找并加载类的二进制数据,在Java堆中也创建一个java.lang.Class类的对象
    • 连接,连接又包含三块内容:验证、准备、初始化。 1)验证,文件格式、元数据、字节码、符号引用验证; 2)准备,为类的静态变量分配内存,并将其初始化为默认值; 3)解析,把类中的符号引用转换为直接引用
    • 初始化,为类的静态变量赋予正确的初始值
    • 使用,new出对象程序中使用
    • 卸载,执行垃圾回收

    11. Java对象结构

    Java对象由三个部分组成:对象头、实例数据、对齐填充。

    对象头由两部分组成,第一部分存储对象自身的运行时数据:哈希码、GC分代年龄、锁标识状态、线程持有的锁、偏向线程ID(一般占32/64 bit)。第二部分是指针类型,指向对象的类元数据类型(即对象代表哪个类)。如果是数组对象,则对象头中还有一部分用来记录数组长度。

    实例数据用来存储对象真正的有效信息(包括父类继承下来的和自己定义的)

    对齐填充:JVM要求对象起始地址必须是8字节的整数倍(8字节对齐)

    12. 如何判断对象可以被回收?

    判断对象是否存活一般有两种方式:

    • 引用计数:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收。此方法简单,无法解决对象相互循环引用的问题。
    • 可达性分析(Reachability Analysis):从GC Roots开始向下搜索,搜索所走过的路径称为引用链。当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,不可达对象。

    13. JVM的永久代中会发生垃圾回收么?

    垃圾回收不会发生在永久代,如果永久代满了或者是超过了临界值,会触发完全垃圾回收(Full GC)。如果你仔细查看垃圾收集器的输出信息,就会发现永久代也是被回收的。这就是为什么正确的永久代大小对避免Full GC是非常重要的原因。请参考下Java8:从永久代到元数据区 (注:Java8中已经移除了永久代,新加了一个叫做元数据区的native内存区)

    14. 引用的分类

    • 强引用:GC时不会被回收
    • 软引用:描述有用但不是必须的对象,在发生内存溢出异常之前被回收
    • 弱引用:描述有用但不是必须的对象,在下一次GC时被回收
    • 虚引用(幽灵引用/幻影引用):无法通过虚引用获得对象,用PhantomReference实现虚引用,虚引用用来在GC时返回一个通知。

    15. GC是什么?为什么要有GC?

    GC是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:System.gc() 或Runtime.getRuntime().gc() ,但JVM可以屏蔽掉显示的垃圾回收调用。 垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低优先级的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。在Java诞生初期,垃圾回收是Java最大的亮点之一,因为服务器端的编程需要有效的防止内存泄露问题,然而时过境迁,如今Java的垃圾回收机制已经成为被诟病的东西。移动智能终端用户通常觉得iOS的系统比Android系统有更好的用户体验,其中一个深层次的原因就在于android系统中垃圾回收的不可预知性。

    补充:垃圾回收机制有很多种,包括:分代复制垃圾回收、标记垃圾回收、增量垃圾回收等方式。标准的Java进程既有栈又有堆。栈保存了原始型局部变量,堆保存了要创建的对象。Java平台对堆内存回收和再利用的基本算法被称为标记和清除,但是Java对其进行了改进,采用“分代式垃圾收集”。这种方法会跟Java对象的生命周期将堆内存划分为不同的区域,在垃圾收集过程中,可能会将对象移动到不同区域:

    • 伊甸园(Eden):这是对象最初诞生的区域,并且对大多数对象来说,这里是它们唯一存在过的区域。
    • 幸存者乐园(Survivor):从伊甸园幸存下来的对象会被挪到这里。
    • 终身颐养园(Tenured):这是足够老的幸存对象的归宿。年轻代收集(Minor-GC)过程是不会触及这个地方的。当年轻代收集不能把对象放进终身颐养园时,就会触发一次完全收集(Major-GC),这里可能还会牵扯到压缩,以便为大对象腾出足够的空间。 与垃圾回收相关的JVM参数:

    -Xms / -Xmx — 堆的初始大小 / 堆的最大大小 -Xmn — 堆中年轻代的大小 -XX:-DisableExplicitGC — 让System.gc()不产生任何作用 -XX:+PrintGCDetails — 打印GC的细节 -XX:+PrintGCDateStamps — 打印GC操作的时间戳 -XX:NewSize / XX:MaxNewSize — 设置新生代大小/新生代最大大小 -XX:NewRatio — 可以设置老生代和新生代的比例 -XX:PrintTenuringDistribution — 设置每次新生代GC后输出幸存者乐园中对象年龄的分布 -XX:InitialTenuringThreshold / -XX:MaxTenuringThreshold:设置老年代阀值的初始值和最大值 -XX:TargetSurvivorRatio:设置幸存区的目标使用率

    16. 判断一个对象应该被回收

    1. 该对象没有与GC Roots相连
    2. 该对象没有重写finalize()方法或finalize()已经被执行过则直接回收(第一次标记)、否则将对象加入到F-Queue队列中(优先级很低的队列)在这里finalize()方法被执行,之后进行第二次标记,如果对象仍然应该被GC则GC,否则移除队列。 (在finalize方法中,对象很可能和其他 GC Roots中的某一个对象建立了关联,finalize方法只会被调用一次,且不推荐使用finalize方法)

    17. 回收方法区

    方法区回收价值很低,主要回收废弃的常量和无用的类。

    如何判断无用的类:

    1. 该类所有实例都被回收(Java堆中没有该类的对象)
    2. 加载该类的ClassLoader已经被回收
    3. 该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方利用反射访问该类

    18. 垃圾收集算法

    GC最基础的算法有三种: 标记 -清除算法、复制算法、标记-压缩算法,我们常用的垃圾回收器一般都采用分代收集算法。

    • 标记 -清除算法,“标记-清除”(Mark-Sweep)算法,如它的名字一样,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。
    • 复制算法,“复制”(Copying)的收集算法,它将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。
    • 标记-压缩算法,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存
    • 分代收集算法,“分代收集”(Generational Collection)算法,把Java堆分为新生代和老年代,这样就可以根据各个年代的特点采用最适当的收集算法。

    19. 垃圾回收器

    • Serial收集器,串行收集器是最古老,最稳定以及效率高的收集器,可能会产生较长的停顿,只使用一个线程去回收。
    • ParNew收集器,ParNew收集器其实就是Serial收集器的多线程版本。
    • Parallel收集器,Parallel Scavenge收集器类似ParNew收集器,Parallel收集器更关注系统的吞吐量。
    • Parallel Old 收集器,Parallel Old是Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法
    • CMS收集器,CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。
    • G1收集器,G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器. 以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征

    20. GC日志分析

    摘录GC日志一部分(前部分为年轻代gc回收;后部分为full gc回收):

    2016-07-05T10:43:18.093+0800: 25.395: [GC [PSYoungGen: 274931K->10738K(274944K)] 371093K->147186K(450048K), 0.0668480 secs] [Times: user=0.17 sys=0.08, real=0.07 secs] 
    2016-07-05T10:43:18.160+0800: 25.462: [Full GC [PSYoungGen: 10738K->0K(274944K)] [ParOldGen: 136447K->140379K(302592K)] 147186K->140379K(577536K) [PSPermGen: 85411K->85376K(171008K)], 0.6763541 secs] [Times: user=1.75 sys=0.02, real=0.68 secs]
    

    通过上面日志分析得出,PSYoungGen、ParOldGen、PSPermGen属于Parallel收集器。其中PSYoungGen表示gc回收前后年轻代的内存变化;ParOldGen表示gc回收前后老年代的内存变化;PSPermGen表示gc回收前后永久区的内存变化。young gc 主要是针对年轻代进行内存回收比较频繁,耗时短;full gc 会对整个堆内存进行回城,耗时长,因此一般尽量减少full gc的次数

    21. 调优命令

    Sun JDK监控和故障处理命令有jps jstat jmap jhat jstack jinfo

    • jps,JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。
    • jstat,JVM statistics Monitoring是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
    • jmap,JVM Memory Map命令用于生成heap dump文件
    • jhat,JVM Heap Analysis Tool命令是与jmap搭配使用,用来分析jmap生成的dump,jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器中查看
    • jstack,用于生成java虚拟机当前时刻的线程快照。
    • jinfo,JVM Configuration info 这个命令作用是实时查看和调整虚拟机运行参数。

    22. 调优工具

    常用调优工具分为两类,jdk自带监控工具:jconsole和jvisualvm,第三方有:MAT(Memory Analyzer Tool)、GChisto。

    • jconsole,Java Monitoring and Management Console是从java5开始,在JDK中自带的java监控和管理控制台,用于对JVM中内存,线程和类等的监控
    • jvisualvm,jdk自带全能工具,可以分析内存快照、线程快照;监控内存变化、GC变化等。
    • MAT,Memory Analyzer Tool,一个基于Eclipse的内存分析工具,是一个快速、功能丰富的Java heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗
    • GChisto,一款专业分析gc日志的工具

    23. Minor GC与Full GC分别在什么时候发生?

    新生代内存不够用时候发生MGC也叫YGC,JVM内存不够的时候发生FGC


    本文转载自:BAT面试必问的23道JVM面试题解析,我猜你最多能回答3道!

    展开全文
  • 这个是什么: 集合了一工具,写几行命令就可以在window系统连接 linux服务器,将本地文件(编译后代码)上传到服务器 写几行命令就可以在window系统连接 到服务器,杀掉指定进程,并启动指定服务。 简单点说,就是...
  • Java基础 1.进程和线程区别;...5.Java中实现多态机制是什么; 6.如何将一个Java对象序列化到文件里; 7.说说你对Java反射理解; 8.同步方法;多进程开发以及多进程应用场景; 9.在Java中wait和se...

    Java基础

    1.进程和线程的区别;

    2.Java的并发、多线程、线程模型;

    3.什么是线程池,如何使用?

    4.数据一致性如何保证;Synchronized关键字,类锁,方法锁,重入锁;

    5.Java中实现多态的机制是什么;

    6.如何将一个Java对象序列化到文件里;

    7.说说你对Java反射的理解;

    8.同步的方法;多进程开发以及多进程应用场景;

    9.在Java中wait和seelp方法的不同;

    10.synchronized 和volatile 关键字的作用;

    11.服务器只提供数据接收接口,在多线程或多进程条件下,如何保证数据的有序到达;

    12.抽象类与接口的区别;应用场景;抽象类是否可以没有方法和属性;

    13.静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?

    14.修改对象A的equals方法的签名,那么使用HashMap存放这个对象实例的时候,会调用哪个equals方法;

    15.说说你对泛型的了解;

    16.Java的异常体系;

    17.如何控制某个方法允许并发访问线程的个数;

    18.动态代理的区别,什么场景使用;

    19.Dex加载过程和优化方式;

    20.Jvm和Gc机制;

    21常用的设计模式。

    22.数据结构与算法

    23.堆和栈在内存中的区别是什么(数据结构方面以及实际实现方面);

    24.最快的排序算法是哪个?给阿里2万多名员工按年龄排序应该选择哪个算法?堆和树的区别;写出快排代码;链表逆序代码;

    25.求1000以内的水仙花数以及40亿以内的水仙花数;

    26.子串包含问题(KMP 算法)写代码实现;

    27.万亿级别的两个URL文件A和B,如何求出A和B的差集C,(Bit映射->hash分组->多文件读写效率->磁盘寻址以及应用层面对寻址的优化)

    28.蚁群算法与蒙特卡洛算法;

    29.写出你所知道的排序算法及时空复杂度,稳定性;

    30.自己集合实现一个队列

    31.自己实现线程安全类

    32.快速排序和冒泡的排序,怎么转换一下。

     

     

    二、Spring mvc与Struts区别

    Hibernate/Ibatis两者的区别

    Hibernate一级和二级缓存

    Hibernate实现集群部署

    Hibernate如何实现声明式事务

    简述Hibernate常见优化策略

    Spring bean的加载过程(推荐看Spring的源码)

    Spring如何实现AOP和IOC

    Spring bean注入方式

    Spring的事务管理(推荐看Spring的源码)

    Spring事务的传播特性

    springmvc原理

    springmvc用过哪些注解

    Restful有几种请求

    Restful好处

    Tomcat,Apache,JBoss的区别

    memcached和redis的区别

    有没有遇到中文乱码问题,如何解决的

    如何理解分布式锁

    你知道的开源协议有哪些

    json和xml区别

     

     

    三、设计模式:

    设计模式的六大原则

    常用的设计模式

    用一个设计模式写一段代码或画出一个设计模式的UML

    如何理解MVC

    高内聚,低耦合方面的理解

     

     

    四、数据结构:

    队列、栈、链表、树、堆、图

    编码实现队列、栈

    操作系统:

    操作系统什么情况下会死锁

    产生死锁的必要条件

    死锁预防

    数据库:

    范式

    数据库事务隔离级别

    数据库连接池的原理

    乐观锁和悲观锁

    如何实现不同数据库的数据查询分页

    SQL注入的原理,如何预防

    数据库索引的实现(B+树介绍、和B树、R树区别)

    SQL性能优化

    数据库索引的优缺点以及什么时候数据库索引失效

    10.Redis的存储结构

    网络:

    OSI七层模型以及TCP/IP四层模型

    HTTP和HTTPS区别

    HTTP报文内容

    get提交和post提交的区别

    get提交是否有字节限制,如果有是在哪限制的

    TCP的三次握手和四次挥手

    session和cookie的区别

    HTTP请求中Session实现原理

    redirect与forward区别

    安全:

    如果客户端不断的发送请求连接会怎样

    DDos攻击

    DDos预防

    那怎么知道连接是恶意的呢?可能是正常连接

    其它:

    说一个你参与的项目、其中作为什么角色

    遇到最困的问题是什么,怎么解决的

    你认为自己有那些方面不足

    平常如何学习的

    如何评价自己

    智力题:

    给你50个红球和50个黑球,有两个一模一样的桶,往桶里放球,让朋友去随机抽,采用什么策略可以让朋友抽到红球的概率更高?

    从100个硬币中找出最轻的那个假币?

    总结:

    以上这些考察的知识点,在强大的互联网上都可以搜索到答案,有些答案可能不是很全,所以需要自己去总结,但是对于一些需要知道原理的知识点,还是推荐看源代码或者对于的书,然后总结得到自己的东西,这样既学到真东西,还不会很容易忘。Java基础的知识点推荐《Java编程思想》,JVM的推荐《深入理解Java虚拟机》,Spring原理的推荐《Spring源码深度解析》,对于网站架构的推荐《大型网站技术架构核心原理与案例分析》。

    展开全文
  • 5、killyouNB.exe文件为主批处理程序,为什么不用bat格式,转换成exe为了可以隐藏批处理窗口,免得看到心烦。 注:使用隐藏批处理软件为:Quick Batch File Compiler 6、“请执行.bat”干什么?运行它后,会...
  • Debianinit进程初始化...用过windows 9.x人应该知道有个批处理文件autoexec.bat,用过windows NT/2000系统人应该在控制面板中见过system service工具,它们目的相同。只是比较起来windows下这些东西...
  • 用过windows 9.x人应该知道有个批处理文件autoexec.bat,用过windows NT/2000系统人应该在控制面板中见过system service工具,它们目的相同。只是比较起来windows下这些东西功能太弱(当然用法...
  • exe用C++做项目。平时打开bat文件打开 ...ps:我现在临时做法用Runtime.getRuntime调用bat文件,bat里面调用.exe文件,这个倒是起效果了,但是bat文件每次打开黑窗口无法关掉。很恶心。真心求教。
  • 1,什么是Java虚拟机?... java源程序先经过javac编译器编译成二进制的.class字节码文件(java的跨平台指的就是.class字节码文件的跨平台,.class字节码文件与平台无关的),.class文件再运行在jvm上,j...
  • Debianinit进程初始化工作原理

    千次阅读 2006-11-04 21:13:00
    用过windows 9.x人应该知道有个批处理文件autoexec.bat,用过windows NT/2000系统人应该在控制面板中见过system service工具,它们目的相同。只是比较起来windows下这些东西功能太弱(当然用法也更
  • 1. 什么是 Java 虚拟机? 为什么 Java 被称作是“平台无关编程语言”?Java 虚拟机是一个可以执行 Java 字节码...2. JDK 和 JRE 区别是什么?Java 运行时环境(JRE)是将要执行 Java 程序 Java 虚拟机。它同
  • Java基础 ...Java中实现多态机制是什么; 如何将一个Java对象序列化到文件里; 说说你对Java反射理解; 同步方法;多进程开发以及多进程应用场景; 在Java中wait和seelp方法不同; synchro...
  • 删除WISPTIS.EXE进程

    千次阅读 2005-07-12 21:33:00
    今天突然发现自己任务管理器里有个WISPTIS.EXE进程,优先级还挺高,不知道是什么东西,上网搜索一番,才知道它全称:windows ink services platform tablet input subsystem。windows墨水服务写字板平台输入子...
  • Java高级互联网架构  Java基础 ...5.Java中实现多态机制是什么; 6.如何将一个Java对象序列化到文件里; 7.说说你对Java反射理解; 8.同步方法;多进程开发以及多进程应用场景; 9...
  • Java基础 1.进程和线程区别;...5.Java中实现多态机制是什么; 6.如何将一个Java对象序列化到文件里; 7.说说你对Java反射理解; 8.同步方法;多进程开发以及多进程应用场景; 9.在Java中wait和se
  • 网络爸爸破解文件.rar

    2009-11-21 17:59:39
    如果网络爸爸安装在D盘,请放到D:\Program Files下,并用记事本打开“1启动网爸”和“2关掉网爸”这两个bat文件,请将第一行C: 改成D: 然后保存退出。 特别提示: 1、每次开机进入桌面后,请找到\Program ...
  • 面试官: 音视频是什么,视频为什么需要压缩 心理分析:很多人对音视频概念停留在 苍老师小电影上,只能理解他是一个视频文件。面试官考对视频文件封装格式,视频文件组成和音视频开发有没相关概念 *...
  • 目录和 zip/jar 文件的类搜索路径> -classpath <目录和 zip/jar 文件的类搜索路径> 用 ; 分隔的目录, JAR 档案 和 ZIP 档案列表, 用于搜索类文件。 -D<名称>=<值> 设置系统属性 -...
  • 所以,我们有必要要切断这个共享:先在d:下新建一个disshare.bat文件,在其中写上如下语句: @echo off net share C$/del net share d$/del netshare ipc$/del net share admin$ /del 接下来将d:disshare....
  • 禁止scrrun.dll 禁止在C盘中新建任何批处理BAT文件 禁止在C盘中新建任何VBS脚本文件 禁止访问TEMP文件夹,防止恶意安装程序 禁止在C盘中新建任何JS脚本文件 禁止在C盘中新建任何JSE脚本文件...
  • 关于ARP病毒预防

    2011-06-16 18:58:58
    察看其中是否有一个名为“ MIR0.dat ”的进程。如果有,则说明已经中毒。右键点击此进程后选择“结束进程”。参见右图。 2 .检查网内感染“ ARP 欺骗”木马染毒的计算机 在“开始” - “程序” - “附件”菜单...

空空如也

空空如也

1 2 3
收藏数 60
精华内容 24
关键字:

bat文件的进程是什么