zoukankan      html  css  js  c++  java
  • 2020Java面试(更新中)

    基本概念

    1.操作系统中 heap 和 stack 的区别
    1.heap是堆,stack是栈;
    2.堆的空间由系统自动分配和释放,栈的空间需要申请和手动释放,所以栈的存取速度快;
    3.堆的空间是很大的自由区,栈的空间有限;
    4.堆内存主要用于存储实例化对象和jre classes,栈内存存储基本变量和对象的引用;
    5.每个线程都有自己的一个Java栈,所有的线程共享一个堆,jvm中,内存分为内存栈区和内存堆区;
    在Java中,若只是声明一个对象,则在栈内存中为其分配地址空间,再new一下,实例化,则在对内存中为其分配存储空间;

    2.什么是基于注解的切面实现
    AOP:面向切面编程,动态的将代码切入到指定类,指定方法的思想就叫面向切面编程;
    1.切入到指定类,指定方法的代码称为切面,切入的类切入的方法称为切点,有了AOP,就可以将几个类共有的代码存入切片中,等待需要时存入到切片中,改变原来的状态或行为;
    2.AOP就是OOP的补充,OOP时横向切面,AOP是纵向切面,AOP使得OOP变得立体,增加了时间,就使得OOP从二维变成了三维;
    3.技术上,AOP通过代理机制实现;
    4.
    3.什么是 对象/关系 映射集成模块
    4.什么是 Java 的反射机制
    Java的反射机制是增强Java的灵活性和动态性的一种方法。
    Java反射机制指的是:在Java运行状态中,任何一个类都可以获得这个类的属性和方法;对于给定的一个类,都可以调用它的属性和方法;这种动态的获取对象的属性或方法就是反射机制。

    5.什么是 ACID
    ACID是衡量事务的四个特性,原子性,一致性,隔离性,耐久性,一般指的是数据库事务的ACID,
    原子性,指的是整个事务是一个独立的单元,要么操作成功,要么操作不成功
    一致性,事务必须要保持和系统处于一致的状态
    隔离性,事务是并发控制机制,一般通过锁实现
    耐久性,一个成功的事务将永久性地改变系统的状态
    6.BS与CS的联系与区别
    BS:浏览器应用,只需要浏览器就可以运行程序
    CS:客户端应用,如手机,电脑桌面应用程序,需要安装软件使用,
    7.Cookie 和 Session的区别

    session:称为会话信息,位于web服务器上,主要负责访问者与网站之间的交互
    1.cookie以文本形式存储在浏览器中,session存储在服务端,限制了存储量;
    2.cookie限制了存储量,只能存储4kb,sesstion无限量;
    3.我们可以轻松访问cookie,但无法访问绘画值,因此更安全;
    4.设置cookie时间可以使cookie过期。但是使用session-destory(),我们将会销毁会话。
    

    总结:如果我们需要经常登录一个站点时,最好用cookie来保存信息,要不然每次登陆都特别麻烦,如果对于需要安全性高的站点以及控制数据的能力时需要用会话效果更佳,当然我们也可以结合两者,使网站按照我们的想法进行运行

    8.fail-fast 与 fail-safe 机制有什么区别
    9.get 和 post请求的区别
    HTTP协议中的两种发送请求的方法。
    1.get会把请求的参数放在url后面,post会放在</request body>中,因此post更安全;
    2.get的长度有限制;
    3.get请求的内容在浏览器中会主动缓存;
    4.get仅支持url编码格式;
    5.get仅支持ASCII字符,post对参数类型没有限制;
    6.后退页面get无影响,post会再次请求;

    10.Interface 与 abstract 类的区别
    abstract类:抽象类,含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象。
    接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
    11.IOC的优点是什么
    IOC(Inversion of Control)控制反转,将创建对象和对象之间的依赖关系的权利交给spring容器,优点是程序员自己不用再new 对象了,这些都交给容器来做。
    12.IO 和 NIO的区别,NIO优点
    NIO即New IO,这个库是在JDK1.4中才引入的,NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在JavaAPI中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。
    Java IO和NIO之间的主要区别:
    1. Java IO和NIO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的,操作更灵活。
    2. Java IO的各种流是阻塞的,,就是当一个线程调用读写方法时,该线程会被阻塞,直到读写完,在这期间该线程不能干其他事,CPU转而去处理其他线程,假如一个线程监听一个端口,一天只会有几次请求进来,但是CPU却不得不为该线程不断的做上下文切换,并且大部分切换以阻塞告终
    NIO通讯是将整个任务切换成许多小任务,由一个线程负责处理所有io事件,并负责分发。它是利用事件驱动机制,而不是监听机制,事件到的时候再触发。NIO线程之间通过wait,notify等方式通讯。保证了每次上下文切换都有意义,减少无谓的进程切换。
    3. Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道。
    13.Java 8 / Java 7 为我们提供了什么新功能

    Java 7 的7个新特性
    1.对集合类的语言支持;
    2.自动资源管理;
    3.改进的通用实例创建类型推断;
    4.数字字面量下划线支持;
    5.switch中使用string;
    6.二进制字面量;
    7.简化可变参数方法调用。

    JAVA8 新特性
    Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。
    方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
    默认方法 − 默认方法就是一个在接口里面有了一个实现的方法。
    新工具 − 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。
    Stream API −新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。
    Date Time API − 加强对日期与时间的处理。
    Optional 类 − Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。
    Nashorn, JavaScript 引擎 − Java 8提供了一个新的Nashorn javascript引擎,它允许我们在JVM上运行特定的javascript应用。

    A.Java 7 的7个新特性
    1.对集合类的语言支持

    Java将包含对创建集合类的第一类语言支持。这意味着集合类的创建可以像Ruby和Perl那样了。
    原本需要怎样:

    List list = new ArrayList();
    list.add("item");
    String item = list.get(0);

         Set<String> set = new HashSet<String>();
         set.add("item");
         Map<String, Integer> map = new HashMap<String, Integer>();
         map.put("key", 1);
         int value = map.get("key");
    

    现在只需这样:(这些集合是不可变的...)

    List list = ["item"];
    String item = list[0];

         Set<String> set = {"item"};
         
         Map<String, Integer> map = {"key" : 1};
         int value = map["key"];
    

    2.自动资源管理
    Java中某些资源是需要手动关闭的,如InputStream,Writes,Sockets,Sql classes等。这个新的语言特性允许try语句本身申请更多的资源,这些资源作用于try代码块,并自动关闭。
    以前的写法:
    BufferedReader br = new BufferedReader(new FileReader(path));
    try {
    return br.readLine();
    } finally {
    br.close();
    }
    现在可以:(有点像C#)
    try (BufferedReader br = new BufferedReader(new FileReader(path)) {
    return br.readLine();
    }
    3.改进的通用实例创建类型推断;
    类型推断是一个特殊的烦恼,如下面的代码:
    Map<String, List> anagrams = new HashMap<String, List>();
    通过类型推断后变成:
    Map<String, List> anagrams = new HashMap<>();
    注:这个<>被叫做diamond(钻石)运算符,Java 7后这个运算符从引用的声明中推断类型。
    4.数字字面量下划线支持
    很长的数字可读性不好,在Java 7中可以使用下划线分隔长int以及long了。如:
    int one_million = 1_000_000;
    这样子还真看不惯。。。不过的确是可读性好了。
    5.switch中使用string
    这个问题是我在Java中不喜欢用switch的原因之一,以前在switch中只能使用number或enum。现在可以使用string了,哈哈,不错,赞个!

    String s = ...
    switch(s) {
    case "quux":
    processQuux(s);
    // fall-through
    case "foo":
    case "bar":
    processFooOrBar(s);
    break;
    case "baz":
    processBaz(s);
    // fall-through
    default:
    processDefault(s);
    break;
    }

    6.二进制字面量
    由于继承C语言,Java代码在传统上迫使程序员只能使用十进制,八进制或十六进制来表示数(numbers)。
    由于很少的域是以bit导向的,这种限制可能导致错误。你现在可以使用0b前缀创建二进制字面量
    int binary = 0b1001_1001;
    现在,可以使用二进制字面量这种表示方式,并且使用非常简短的代码,可将二进制字符转换为数据类型,如在byte或short。
    byte aByte = (byte)0b001;
    short aShort = (short)0b010;
    7.简化可变参数方法调用。
    当程序员试图使用一个不可具体化的可变参数并调用一个varargs (可变)方法时,编辑器会生成一个“非安全操作”的警告。
    JDK 7将警告从call转移到了方法声明(methord declaration)的过程中。这样API设计者就可以使用vararg,因为警告的数量大大减少了。

    B.Java8的新特性
    Java 8是Java的一个重大版本,有人认为,虽然这些新特性领Java开发人员十分期待,但同时也需要花不少精力去学习。在这一小节中,我们将介绍Java 8的大部分新特性。
    2.1 Lambda表达式和函数式接口
    Lambda表达式(也称为闭包)是Java 8中最大和最令人期待的语言改变。它允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理:函数式开发者非常熟悉这些概念。很多JVM平台上的语言(Groovy、Scala等)从诞生之日就支持Lambda表达式,但是Java开发者没有选择,只能使用匿名内部类代替Lambda表达式。
    Lambda的设计耗费了很多时间和很大的社区力量,最终找到一种折中的实现方案,可以实现简洁而紧凑的语言结构。最简单的Lambda表达式可由逗号分隔的参数列表、->符号和语句块组成,例如:
    Arrays.asList( "a", "b", "d" ).forEach( e -> System.out.println( e ) );
    在上面这个代码中的参数e的类型是由编译器推理得出的,你也可以显式指定该参数的类型,例如:
    Arrays.asList( "a", "b", "d" ).forEach( ( String e ) -> System.out.println( e ) );
    如果Lambda表达式需要更复杂的语句块,则可以使用花括号将该语句块括起来,类似于Java中的函数体,例如:
    Arrays.asList( "a", "b", "d" ).forEach( e -> {
    System.out.print( e );
    System.out.print( e );
    } );
    Lambda表达式可以引用类成员和局部变量(会将这些变量隐式得转换成final的),例如下列两个代码块的效果完全相同:
    String separator = ",";
    Arrays.asList( "a", "b", "d" ).forEach(
    ( String e ) -> System.out.print( e + separator ) );

    final String separator = ",";
    Arrays.asList( "a", "b", "d" ).forEach(
    ( String e ) -> System.out.print( e + separator ) );
    Lambda表达式有返回值,返回值的类型也由编译器推理得出。如果Lambda表达式中的语句块只有一行,则可以不用使用return语句,下列两个代码片段效果相同:
    Arrays.asList( "a", "b", "d" ).sort( ( e1, e2 ) -> e1.compareTo( e2 ) );

    Arrays.asList( "a", "b", "d" ).sort( ( e1, e2 ) -> {
    int result = e1.compareTo( e2 );
    return result;
    } );
    Lambda的设计者们为了让现有的功能与Lambda表达式良好兼容,考虑了很多方法,于是产生了函数接口这个概念。函数接口指的是只有一个函数的接口,这样的接口可以隐式转换为Lambda表达式。java.lang.Runnable和java.util.concurrent.Callable是函数式接口的最佳例子。在实践中,函数式接口非常脆弱:只要某个开发者在该接口中添加一个函数,则该接口就不再是函数式接口进而导致编译失败。为了克服这种代码层面的脆弱性,并显式说明某个接口是函数式接口,Java 8 提供了一个特殊的注解@FunctionalInterface(Java 库中的所有相关接口都已经带有这个注解了),举个简单的函数式接口的定义:
    @FunctionalInterface
    public interface Functional {
    void method();
    }
    不过有一点需要注意,默认方法和静态方法不会破坏函数式接口的定义,因此如下的代码是合法的。

    @FunctionalInterface
    public interface FunctionalDefaultMethods {
    void method();

    default void defaultMethod() {            
    }        
    

    }

    Lambda表达式作为Java 8的最大卖点,它有潜力吸引更多的开发者加入到JVM平台,并在纯Java编程中使用函数式编程的概念。如果你需要了解更多Lambda表达式的细节,可以参考官方文档。
    2.2 接口的默认方法和静态方法
    Java 8使用两个新概念扩展了接口的含义:默认方法和静态方法。默认方法使得接口有点类似traits,不过要实现的目标不一样。默认方法使得开发者可以在 不破坏二进制兼容性的前提下,往现存接口中添加新的方法,即不强制那些实现了该接口的类也同时实现这个新加的方法。
    默认方法和抽象方法之间的区别在于抽象方法需要实现,而默认方法不需要。接口提供的默认方法会被接口的实现类继承或者覆写,例子代码如下:

    private interface Defaulable {
    // Interfaces now allow default methods, the implementer may or
    // may not implement (override) them.
    default String notRequired() {
    return "Default implementation";
    }
    }

    private static class DefaultableImpl implements Defaulable {
    }

    private static class OverridableImpl implements Defaulable {
    @Override
    public String notRequired() {
    return "Overridden implementation";
    }
    }

    Defaulable接口使用关键字default定义了一个默认方法notRequired()。DefaultableImpl类实现了这个接口,同时默认继承了这个接口中的默认方法;OverridableImpl类也实现了这个接口,但覆写了该接口的默认方法,并提供了一个不同的实现。
    Java 8带来的另一个有趣的特性是在接口中可以定义静态方法,例子代码如下:
    private interface DefaulableFactory {
    // Interfaces now allow static methods
    static Defaulable create( Supplier< Defaulable > supplier ) {
    return supplier.get();
    }
    }
    下面的代码片段整合了默认方法和静态方法的使用场景:

    public static void main( String[] args ) {
    Defaulable defaulable = DefaulableFactory.create( DefaultableImpl::new );
    System.out.println( defaulable.notRequired() );

    defaulable = DefaulableFactory.create( OverridableImpl::new );
    System.out.println( defaulable.notRequired() );
    

    }

    这段代码的输出结果如下:
    Default implementation
    Overridden implementation
    由于JVM上的默认方法的实现在字节码层面提供了支持,因此效率非常高。默认方法允许在不打破现有继承体系的基础上改进接口。该特性在官方库中的应用是:给java.util.Collection接口添加新方法,如stream()、parallelStream()、forEach()和removeIf()等等。
    尽管默认方法有这么多好处,但在实际开发中应该谨慎使用:在复杂的继承体系中,默认方法可能引起歧义和编译错误。如果你想了解更多细节,可以参考官方文档。
    2.3 方法引用
    方法引用使得开发者可以直接引用现存的方法、Java类的构造方法或者实例对象。方法引用和Lambda表达式配合使用,使得java类的构造方法看起来紧凑而简洁,没有很多复杂的模板代码。
    西门的例子中,Car类是不同方法引用的例子,可以帮助读者区分四种类型的方法引用。

    public static class Car {
    public static Car create( final Supplier< Car > supplier ) {
    return supplier.get();
    }

    public static void collide( final Car car ) {
        System.out.println( "Collided " + car.toString() );
    }
    
    public void follow( final Car another ) {
        System.out.println( "Following the " + another.toString() );
    }
    
    public void repair() {   
        System.out.println( "Repaired " + this.toString() );
    }
    

    }

    第一种方法引用的类型是构造器引用,语法是Class::new,或者更一般的形式:Class::new。注意:这个构造器没有参数。
    final Car car = Car.create( Car::new );
    final List< Car > cars = Arrays.asList( car );
    第二种方法引用的类型是静态方法引用,语法是Class::static_method。注意:这个方法接受一个Car类型的参数。
    cars.forEach( Car::collide );
    第四种方法引用的类型是某个实例对象的成员方法的引用,语法是instance::method。注意:这个方法接受一个Car类型的参数:
    final Car police = Car.create( Car::new );
    cars.forEach( police::follow );
    运行上述例子,可以在控制台看到如下输出(Car实例可能不同):
    Collided com.javacodegeeks.java8.method.references.MethodReferences(Car@7a81197d Repaired com.javacodegeeks.java8.method.references.MethodReferences)Car@7a81197d
    Following the com.javacodegeeks.java8.method.references.MethodReferences$Car@7a81197d
    如果想了解和学习更详细的内容,可以参考官方文档
    2.4 重复注解
    自从Java 5中引入注解以来,这个特性开始变得非常流行,并在各个框架和项目中被广泛使用。不过,注解有一个很大的限制是:在同一个地方不能多次使用同一个注解。Java 8打破了这个限制,引入了重复注解的概念,允许在同一个地方多次使用同一个注解。
    在Java 8中使用@Repeatable注解定义重复注解,实际上,这并不是语言层面的改进,而是编译器做的一个trick,底层的技术仍然相同。可以利用下面的代码说明:

    package com.javacodegeeks.java8.repeatable.annotations;

    import java.lang.annotation.ElementType;
    import java.lang.annotation.Repeatable;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;

    public class RepeatingAnnotations {
    @Target( ElementType.TYPE )
    @Retention( RetentionPolicy.RUNTIME )
    public @interface Filters {
    Filter[] value();
    }

    @Target( ElementType.TYPE )
    @Retention( RetentionPolicy.RUNTIME )
    @Repeatable( Filters.class )
    public @interface Filter {
        String value();
    };
    
    @Filter( "filter1" )
    @Filter( "filter2" )
    public interface Filterable {        
    }
    
    public static void main(String[] args) {
        for( Filter filter: Filterable.class.getAnnotationsByType( Filter.class ) ) {
            System.out.println( filter.value() );
        }
    }
    

    }

    正如我们所见,这里的Filter类使用@Repeatable(Filters.class)注解修饰,而Filters是存放Filter注解的容器,编译器尽量对开发者屏蔽这些细节。这样,Filterable接口可以用两个Filter注解注释(这里并没有提到任何关于Filters的信息)。
    另外,反射API提供了一个新的方法:getAnnotationsByType(),可以返回某个类型的重复注解,例如Filterable.class.getAnnoation(Filters.class)将返回两个Filter实例,输出到控制台的内容如下所示:
    filter1
    filter2
    如果你希望了解更多内容,可以参考官方文档。
    2.5 更好的类型推断
    Java 8编译器在类型推断方面有很大的提升,在很多场景下编译器可以推导出某个参数的数据类型,从而使得代码更为简洁。例子代码如下:

    package com.javacodegeeks.java8.type.inference;

    public class Value< T > {
    public static< T > T defaultValue() {
    return null;
    }

    public T getOrDefault( T value, T defaultValue ) {
        return ( value != null ) ? value : defaultValue;
    }
    

    }

    下列代码是Value类型的应用:

    package com.javacodegeeks.java8.type.inference;

    public class TypeInference {
    public static void main(String[] args) {
    final Value< String > value = new Value<>();
    value.getOrDefault( "22", Value.defaultValue() );
    }
    }

    参数Value.defaultValue()的类型由编译器推导得出,不需要显式指明。在Java 7中这段代码会有编译错误,除非使用Value.defaultValue()。
    2.6 拓宽注解的应用场景
    Java 8拓宽了注解的应用场景。现在,注解几乎可以使用在任何元素上:局部变量、接口类型、超类和接口实现类,甚至可以用在函数的异常定义上。下面是一些例子:

    package com.javacodegeeks.java8.annotations;

    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    import java.util.ArrayList;
    import java.util.Collection;

    public class Annotations {
    @Retention( RetentionPolicy.RUNTIME )
    @Target( { ElementType.TYPE_USE, ElementType.TYPE_PARAMETER } )
    public @interface NonEmpty {
    }

    public static class Holder< @NonEmpty T > extends @NonEmpty Object {
        public void method() throws @NonEmpty Exception {            
        }
    }
    
    @SuppressWarnings( "unused" )
    public static void main(String[] args) {
        final Holder< String > holder = new @NonEmpty Holder< String >();        
        @NonEmpty Collection< @NonEmpty String > strings = new ArrayList<>();        
    }
    

    }

    ElementType.TYPE_USER和ElementType.TYPE_PARAMETER是Java 8新增的两个注解,用于描述注解的使用场景。Java 语言也做了对应的改变,以识别这些新增的注解。
    14.什么是竞态条件? 举个例子说明。

    15.JRE、JDK、JVM 及 JIT 之间有什么不同
    16.MVC的各个部分都有那些技术来实现?如何实现?
    17.RPC 通信和 RMI 区别
    18.什么是 Web Service(Web服务)
    19.JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI,WSDL解释。
    20.WEB容器主要有哪些功能? 并请列出一些常见的WEB容器名字。
    一个”.java”源文件中是否可以包含多个类(不是内部类)?有什么限制
    简单说说你了解的类加载器。是否实现过类加载器
    解释一下什么叫AOP(面向切面编程)
    请简述 Servlet 的生命周期及其相关的方法
    请简述一下 Ajax 的原理及实现步骤
    简单描述Struts的主要功能
    什么是 N 层架构
    什么是CORBA?用途是什么
    什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”
    什么是正则表达式?用途是什么?哪个包使用正则表达式来实现模式匹配
    什么是懒加载(Lazy Loading)
    什么是尾递归,为什么需要尾递归
    什么是控制反转(Inversion of Control)与依赖注入(Dependency Injection)
    Thread的 start方法只能启动一次,启动多次会出现异常,那么线程池是怎么实现复用Thread的

    关键字
    finalize

    什么是finalize()方法
    finalize()方法什么时候被调用
    析构函数(finalization)的目的是什么
    final 和 finalize 的区别
    final
    final关键字有哪些用法
    final 与 static 关键字可以用于哪里?它们的作用是什么
    final, finally, finalize的区别
    final、finalize 和 finally 的不同之处?
    能否在运行时向 static final 类型的赋值
    使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变
    一个类被声明为final类型,表示了什么意思
    throws, throw, try, catch, finally分别代表什么意义
    Java 有几种修饰符?分别用来修饰什么
    volatile

    volatile 修饰符的有过什么实践
    volatile 变量是什么?volatile 变量和 atomic 变量有什么不同
    volatile 类型变量提供什么保证?能使得一个非原子操作变成原子操作吗
    能创建 volatile 数组吗?
    transient变量有什么特点
    super什么时候使用
    public static void 写成 static public void会怎样
    说明一下public static void main(String args[])这段声明里每个关键字的作用
    请说出作用域public, private, protected, 以及不写时的区别
    sizeof 是Java 的关键字吗
    static

    static class 与 non static class的区别
    static 关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法
    静态类型有什么特点
    main() 方法为什么必须是静态的?能不能声明 main() 方法为非静态
    是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用
    静态变量在什么时候加载?编译期还是运行期?静态代码块加载的时机呢
    成员方法是否可以访问静态变量?为什么静态方法不能访问成员变量
    switch

    switch 语句中的表达式可以是什么类型数据
    switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上
    while 循环和 do 循环有什么不同
    操作符

    &操作符和&&操作符有什么区别?
    a = a + b 与 a += b 的区别?
    逻辑操作符 (&,|,^)与条件操作符(&&,||)的区别
    3*0.1 == 0.3 将会返回什么?true 还是 false?
    float f=3.4; 是否正确?
    short s1 = 1; s1 = s1 + 1;有什么错?
    数据结构

    基础类型(Primitives)

    基础类型(Primitives)与封装类型(Wrappers)的区别在哪里
    简述九种基本数据类型的大小,以及他们的封装类
    int 和 Integer 哪个会占用更多的内存? int 和 Integer 有什么区别?parseInt()函数在什么时候使用到
    float和double的默认值是多少
    如何去小数四舍五入保留小数点后两位
    char 型变量中能不能存贮一个中文汉字,为什么
    类型转换

    怎样将 bytes 转换为 long 类型
    怎么将 byte 转换为 String
    如何将数值型字符转换为数字
    我们能将 int 强制转换为 byte 类型的变量吗?如果该值大于 byte 类型的范围,将会出现什么现象
    能在不进行强制转换的情况下将一个 double 值赋值给 long 类型的变量吗
    类型向下转换是什么
    数组

    如何权衡是使用无序的数组还是有序的数组
    怎么判断数组是 null 还是为空
    怎么打印数组? 怎样打印数组中的重复元素
    Array 和 ArrayList有什么区别?什么时候应该使用Array而不是ArrayList
    数组和链表数据结构描述,各自的时间复杂度
    数组有没有length()这个方法? String有没有length()这个方法
    队列

    队列和栈是什么,列出它们的区别
    BlockingQueue是什么
    简述 ConcurrentLinkedQueue LinkedBlockingQueue 的用处和不同之处。
    ArrayList、Vector、LinkedList的存储性能和特性
    String
    StringBuffer

    ByteBuffer 与 StringBuffer有什么区别
    HashMap

    HashMap的工作原理是什么
    内部的数据结构是什么
    HashMap 的 table的容量如何确定?loadFactor 是什么? 该容量如何变化?这种变化会带来什么问题?
    HashMap 实现的数据结构是什么?如何实现
    HashMap 和 HashTable、ConcurrentHashMap 的区别
    HashMap的遍历方式及效率
    HashMap、LinkedMap、TreeMap的区别
    如何决定选用HashMap还是TreeMap
    如果HashMap的大小超过了负载因子(load factor)定义的容量,怎么办
    HashMap 是线程安全的吗?并发下使用的 Map 是什么,它们内部原理分别是什么,比如存储方式、 hashcode、扩容、 默认容量等
    HashSet

    HashSet和TreeSet有什么区别
    HashSet 内部是如何工作的
    WeakHashMap 是怎么工作的?
    Set

    Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用 == 还是 equals()? 它们有何区别?
    TreeMap:TreeMap 是采用什么树实现的?TreeMap、HashMap、LindedHashMap的区别。TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?
    TreeSet:一个已经构建好的 TreeSet,怎么完成倒排序。
    EnumSet 是什么
    Hash算法

    Hashcode 的作用
    简述一致性 Hash 算法
    有没有可能 两个不相等的对象有相同的 hashcode?当两个对象 hashcode 相同怎么办?如何获取值对象
    为什么在重写 equals 方法的时候需要重写 hashCode 方法?equals与 hashCode 的异同点在哪里
    a.hashCode() 有什么用?与 a.equals(b) 有什么关系
    hashCode() 和 equals() 方法的重要性体现在什么地方
    Object:Object有哪些公用方法?Object类hashcode,equals 设计原则? sun为什么这么设计?Object类的概述
    如何在父类中为子类自动完成所有的 hashcode 和 equals 实现?这么做有何优劣。
    可以在 hashcode() 中使用随机数字吗?
    LinkedHashMap

    LinkedHashMap 和 PriorityQueue 的区别是什么
    List

    List, Set, Map三个接口,存取元素时各有什么特点
    List, Set, Map 是否继承自 Collection 接口
    遍历一个 List 有哪些不同的方式
    LinkedList
    LinkedList 是单向链表还是双向链表
    LinkedList 与 ArrayList 有什么区别
    描述下 Java 中集合(Collections),接口(Interfaces),实现(Implementations)的概念。LinkedList 与 ArrayList 的区别是什么?
    插入数据时,ArrayList, LinkedList, Vector谁速度较快?
    ArrayList
    ArrayList 和 HashMap 的默认大小是多数
    ArrayList 和 LinkedList 的区别,什么时候用 ArrayList?
    ArrayList 和 Set 的区别?
    ArrayList, LinkedList, Vector的区别
    ArrayList是如何实现的,ArrayList 和 LinkedList 的区别
    ArrayList如何实现扩容
    Array 和 ArrayList 有何区别?什么时候更适合用Array
    说出ArraList,Vector, LinkedList的存储性能和特性
    Map

    Map, Set, List, Queue, Stack
    Map 接口提供了哪些不同的集合视图
    为什么 Map 接口不继承 Collection 接口
    Collections

    介绍Java中的Collection FrameWork。集合类框架的基本接口有哪些
    Collections类是什么?Collection 和 Collections的区别?Collection、Map的实现
    集合类框架的最佳实践有哪些
    为什么 Collection 不从 Cloneable 和 Serializable 接口继承
    说出几点 Java 中使用 Collections 的最佳实践?
    Collections 中 遗留类 (HashTable、Vector) 和 现有类的区别
    什么是 B+树,B-树,列出实际的使用场景。

    接口

    Comparator 与 Comparable 接口是干什么的?列出它们的区别
    对象

    拷贝(clone)

    如何实现对象克隆
    深拷贝和浅拷贝区别
    深拷贝和浅拷贝如何实现激活机制
    写clone()方法时,通常都有一行代码,是什么
    比较

    在比较对象时,”==” 运算符和 equals 运算有何区别
    如果要重写一个对象的equals方法,还要考虑什么
    两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对
    构造器

    构造器链是什么
    创建对象时构造器的调用顺序
    不可变对象

    什么是不可变象(immutable object)
    为什么 Java 中的 String 是不可变的(Immutable)
    如何构建不可变的类结构?关键点在哪里
    能创建一个包含可变对象的不可变对象吗
    如何对一组对象进行排序

    方法

    构造器(constructor)是否可被重写(override)
    方法可以同时即是 static 又是 synchronized 的吗
    abstract 的 method是否可同时是 static,是否可同时是 native,是否可同时是synchronized
    Java支持哪种参数传递类型
    一个对象被当作参数传递到一个方法,是值传递还是引用传递
    当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递
    我们能否重载main()方法
    如果main方法被声明为private会怎样
    GC

    概念

    GC是什么?为什么要有GC
    什么时候会导致垃圾回收
    GC是怎么样运行的
    新老以及永久区是什么
    GC 有几种方式?怎么配置
    什么时候一个对象会被GC? 如何判断一个对象是否存活
    System.gc() Runtime.gc()会做什么事情? 能保证 GC 执行吗
    垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
    Minor GC 、Major GC、Young GC 与 Full GC分别在什么时候发生
    垃圾回收算法的实现原理
    如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存?
    垃圾回收的最佳做法是什么
    GC收集器有哪些

    垃圾回收器的基本原理是什么?
    串行(serial)收集器和吞吐量(throughput)收集器的区别是什么
    Serial 与 Parallel GC之间的不同之处
    CMS 收集器 与 G1 收集器的特点与区别
    CMS垃圾回收器的工作过程
    JVM 中一次完整的 GC 流程是怎样的? 对象如何晋升到老年代
    吞吐量优先和响应优先的垃圾收集器选择
    GC策略

    举个实际的场景,选择一个GC策略
    JVM的永久代中会发生垃圾回收吗
    收集方法

    标记清除、标记整理、复制算法的原理与特点?分别用在什么地方
    如果让你优化收集方法,有什么思路
    JVM

    参数

    说说你知道的几种主要的jvm 参数
    -XX:+UseCompressedOops 有什么作用
    类加载器(ClassLoader)

    Java 类加载器都有哪些
    JVM如何加载字节码文件
    内存管理

    JVM内存分哪几个区,每个区的作用是什么
    一个对象从创建到销毁都是怎么在这些部分里存活和转移的
    解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法
    JVM中哪个参数是用来控制线程的栈堆栈小
    简述内存分配与回收策略
    简述重排序,内存屏障,happen-before,主内存,工作内存
    Java中存在内存泄漏问题吗?请举例说明
    简述 Java 中软引用(SoftReferenc)、弱引用(WeakReference)和虚引用
    内存映射缓存区是什么
    jstack,jstat,jmap,jconsole怎么用
    32 位 JVM 和 64 位 JVM 的最大堆内存分别是多数?32 位和 64 位的 JVM,int 类型变量的长度是多数?
    怎样通过 Java 程序来判断 JVM 是 32 位 还是 64 位
    JVM自身会维护缓存吗?是不是在堆中进行对象分配,操作系统的堆还是JVM自己管理堆
    什么情况下会发生栈内存溢出
    双亲委派模型是什么

    多线程

    基本概念

    什么是线程
    多线程的优点
    多线程的几种实现方式
    用 Runnable 还是 Thread
    什么是线程安全
    Vector, SimpleDateFormat 是线程安全类吗
    什么 Java 原型不是线程安全的
    哪些集合类是线程安全的
    多线程中的忙循环是什么
    如何创建一个线程
    编写多线程程序有几种实现方式
    什么是线程局部变量
    线程和进程有什么区别?进程间如何通讯,线程间如何通讯
    什么是多线程环境下的伪共享(false sharing)
    同步和异步有何异同,在什么情况下分别使用他们?举例说明
    Current

    ConcurrentHashMap 和 Hashtable的区别
    ArrayBlockingQueue, CountDownLatch的用法
    ConcurrentHashMap的并发度是什么
    CyclicBarrier 和 CountDownLatch有什么不同?各自的内部原理和用法是什么
    Semaphore的用法
    Thread

    启动一个线程是调用 run() 还是 start() 方法?start() 和 run() 方法有什么区别
    调用start()方法时会执行run()方法,为什么不能直接调用run()方法
    sleep() 方法和对象的 wait() 方法都可以让线程暂停执行,它们有什么区别
    yield方法有什么作用?sleep() 方法和 yield() 方法有什么区别
    Java 中如何停止一个线程
    stop() 和 suspend() 方法为何不推荐使用
    如何在两个线程间共享数据
    如何强制启动一个线程
    如何让正在运行的线程暂停一段时间
    什么是线程组,为什么在Java中不推荐使用
    你是如何调用 wait(方法的)?使用 if 块还是循环?为什么
    生命周期

    有哪些不同的线程生命周期
    线程状态,BLOCKED 和 WAITING 有什么区别
    画一个线程的生命周期状态图
    ThreadLocal 用途是什么,原理是什么,用的时候要注意什么
    ThreadPool

    线程池是什么?为什么要使用它
    如何创建一个Java线程池
    ThreadPool用法与优势
    提交任务时,线程池队列已满时会发会生什么
    newCache 和 newFixed 有什么区别?简述原理。构造函数的各个参数的含义是什么,比如 coreSize, maxsize 等
    线程池的实现策略
    线程池的关闭方式有几种,各自的区别是什么
    线程池中submit() 和 execute()方法有什么区别?
    线程调度

    Java中用到的线程调度算法是什么
    什么是多线程中的上下文切换
    你对线程优先级的理解是什么
    什么是线程调度器 (Thread Scheduler) 和时间分片 (Time Slicing)
    线程同步
    指令重排在生层应用中对底层c的依赖

    请说出你所知的线程同步的方法
    synchronized 的原理是什么
    synchronized 和 ReentrantLock 有什么不同
    什么场景下可以使用 volatile 替换 synchronized
    有T1,T2,T3三个线程,怎么确保它们按顺序执行?怎样保证T2在T1执行完后执行,T3在T2执行完后执行
    同步块内的线程抛出异常会发生什么
    当一个线程进入一个对象的 synchronized 方法A 之后,其它线程是否可进入此对象的 synchronized 方法B
    使用 synchronized 修饰静态方法和非静态方法有什么区别
    如何从给定集合那里创建一个 synchronized 的集合

    Java Concurrency API 中 的 Lock 接口是什么?对比同步它有什么优势
    Lock 与 Synchronized 的区别?Lock 接口比 synchronized 块的优势是什么
    ReadWriteLock是什么?
    锁机制有什么用
    什么是乐观锁(Optimistic Locking)?如何实现乐观锁?如何避免ABA问题
    解释以下名词:重排序,自旋锁,偏向锁,轻量级锁,可重入锁,公平锁,非公平锁,乐观锁,悲观锁
    什么时候应该使用可重入锁
    简述锁的等级方法锁、对象锁、类锁
    Java中活锁和死锁有什么区别?
    什么是死锁(Deadlock)?导致线程死锁的原因?如何确保 N 个线程可以访问 N 个资源同时又不导致死锁
    死锁与活锁的区别,死锁与饥饿的区别
    怎么检测一个线程是否拥有锁
    如何实现分布式锁
    有哪些无锁数据结构,他们实现的原理是什么
    读写锁可以用于什么应用场景
    Executors类是什么? Executor和Executors的区别
    什么是Java线程转储(Thread Dump),如何得到它
    如何在Java中获取线程堆栈
    说出 3 条在 Java 中使用线程的最佳实践
    在线程中你怎么处理不可捕捉异常
    实际项目中使用多线程举例。你在多线程环境中遇到的常见的问题是什么?你是怎么解决它的
    请说出与线程同步以及线程调度相关的方法
    程序中有3个 socket,需要多少个线程来处理
    假如有一个第三方接口,有很多个线程去调用获取数据,现在规定每秒钟最多有 10 个线程同时调用它,如何做到
    如何在 Windows 和 Linux 上查找哪个线程使用的 CPU 时间最长
    如何确保 main() 方法所在的线程是 Java 程序最后结束的线程
    非常多个线程(可能是不同机器),相互之间需要等待协调才能完成某种工作,问怎么设计这种协调方案
    你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它

    异常

    基本概念

    Error 和 Exception有什么区别
    UnsupportedOperationException是什么
    NullPointerException 和 ArrayIndexOutOfBoundException 之间有什么相同之处
    什么是受检查的异常,什么是运行时异常
    运行时异常与一般异常有何异同
    简述一个你最常见到的runtime exception(运行时异常)
    finally

    finally关键词在异常处理中如何使用
    如果执行finally代码块之前方法返回了结果,或者JVM退出了,finally块中的代码还会执行吗
    try里有return,finally还执行么?那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后
    在什么情况下,finally语句不会执行
    throw 和 throws 有什么区别?
    OOM你遇到过哪些情况?你是怎么搞定的?
    SOF你遇到过哪些情况?
    既然我们可以用RuntimeException来处理错误,那么你认为为什么Java中还存在检查型异常
    当自己创建异常类的时候应该注意什么
    导致空指针异常的原因
    异常处理 handle or declare 原则应该如何理解
    怎么利用 JUnit 来测试一个方法的异常
    catch块里别不写代码有什么问题
    你曾经自定义实现过异常吗?怎么写的
    什么是 异常链
    在try块中可以抛出异常吗

    JDBC

    通过 JDBC 连接数据库有哪几种方式
    阐述 JDBC 操作数据库的基本步骤
    JDBC 中如何进行事务处理
    什么是 JdbcTemplate
    什么是 DAO 模块
    使用 JDBC 操作数据库时,如何提升读取数据的性能?如何提升更新数据的性能
    列出 5 个应该遵循的 JDBC 最佳实践
    IO

    File
    File类型中定义了什么方法来创建一级目录
    File类型中定义了什么方法来判断一个文件是否存在


    为了提高读写性能,可以采用什么流
    Java中有几种类型的流
    JDK 为每种类型的流提供了一些抽象类以供继承,分别是哪些类
    对文本文件操作用什么I/O流
    对各种基本数据类型和String类型的读写,采用什么流
    能指定字符编码的 I/O 流类型是什么
    序列化
    什么是序列化?如何实现 Java 序列化及注意事项
    Serializable 与 Externalizable 的区别
    Socket
    socket 选项 TCP NO DELAY 是指什么
    Socket 工作在 TCP/IP 协议栈是哪一层
    TCP、UDP 区别及 Java 实现方式
    说几点 IO 的最佳实践
    直接缓冲区与非直接缓冲器有什么区别?
    怎么读写 ByteBuffer?ByteBuffer 中的字节序是什么
    当用System.in.read(buffer)从键盘输入一行n个字符后,存储在缓冲区buffer中的字节数是多少
    如何使用扫描器类(Scanner Class)令牌化
    面向对象编程(OOP)

    解释下多态性(polymorphism),封装性(encapsulation),内聚(cohesion)以及耦合(coupling)
    多态的实现原理
    封装、继承和多态是什么
    对象封装的原则是什么?

    获得一个类的类对象有哪些方式
    重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
    说出几条 Java 中方法重载的最佳实践
    抽象类
    抽象类和接口的区别
    抽象类中是否可以有静态的main方法
    抽象类是否可实现(implements)接口
    抽象类是否可继承具体类(concrete class)
    匿名类(Anonymous Inner Class)
    匿名内部类是否可以继承其它类?是否可以实现接口

    内部类
    内部类分为几种
    内部类可以引用它的包含类(外部类)的成员吗
    请说一下 Java 中为什么要引入内部类?还有匿名内部类
    继承
    继承(Inheritance)与聚合(Aggregation)的区别在哪里
    继承和组合之间有什么不同
    为什么类只能单继承,接口可以多继承
    存在两个类,B 继承 A,C 继承 B,能将 B 转换为 C 么?如 C = (C) B
    如果类 a 继承类 b,实现接口c,而类 b 和接口 c 中定义了同名变量,请问会出现什么问题
    接口
    接口是什么
    接口是否可继承接口
    为什么要使用接口而不是直接使用具体类?接口有什么优点
    泛型

    泛型的存在是用来解决什么问题
    泛型的常用特点
    List能否转为List
    工具类

    日历
    Calendar Class的用途
    如何在Java中获取日历类的实例
    解释一些日历类中的重要方法
    GregorianCalendar 类是什么
    SimpleTimeZone 类是什么
    Locale类是什么
    如何格式化日期对象
    如何添加小时(hour)到一个日期对象(Date Objects)
    如何将字符串 YYYYMMDD 转换为日期
    Math
    Math.round()什么作用?Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?

    XML
    XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?DOM 和 SAX 解析器有什么不同?
    Java解析XML的方式
    用 jdom 解析 xml 文件时如何解决中文问题?如何解析
    你在项目中用到了 XML 技术的哪些方面?如何实现
    动态代理

    描述动态代理的几种实现方式,分别说出相应的优缺点
    设计模式

    什么是设计模式(Design Patterns)?你用过哪种设计模式?用在什么场合
    你知道哪些商业级设计模式?
    哪些设计模式可以增加系统的可扩展性
    单例模式
    除了单例模式,你在生产环境中还用过什么设计模式?
    写 Singleton 单例模式
    单例模式的双检锁是什么
    如何创建线程安全的 Singleton
    什么是类的单例模式
    写出三种单例模式实现
    适配器模式
    适配器模式是什么?什么时候使用
    适配器模式和代理模式之前有什么不同
    适配器模式和装饰器模式有什么区别
    什么时候使用享元模式
    什么时候使用组合模式
    什么时候使用访问者模式
    什么是模板方法模式
    请给出1个符合开闭原则的设计模式的例子
    开放问题

    用一句话概括 Web 编程的特点
    Google是如何在一秒内把搜索结果返回给用户
    哪种依赖注入方式你建议使用,构造器注入,还是 Setter方法注入
    树(二叉或其他)形成许多普通数据结构的基础。请描述一些这样的数据结构以及何时可以使用它们
    某一项功能如何设计
    线上系统突然变得异常缓慢,你如何查找问题
    什么样的项目不适合用框架
    新浪微博是如何实现把微博推给订阅者
    简要介绍下从浏览器输入 URL 开始到获取到请求界面之后 Java Web 应用中发生了什么
    请你谈谈SSH整合
    高并发下,如何做到安全的修改同一行数据
    12306网站的订票系统如何实现,如何保证不会票不被超卖
    网站性能优化如何优化的
    聊了下曾经参与设计的服务器架构
    请思考一个方案,实现分布式环境下的 countDownLatch
    请思考一个方案,设计一个可以控制缓存总体大小的自动适应的本地缓存
    在你的职业生涯中,算得上最困难的技术挑战是什么
    如何写一篇设计文档,目录是什么
    大写的O是什么?举几个例子
    编程中自己都怎么考虑一些设计原则的,比如开闭原则,以及在工作中的应用
    解释一下网络应用的模式及其特点
    设计一个在线文档系统,文档可以被编辑,如何防止多人同时对同一份文档进行编辑更新
    说出数据连接池的工作机制是什么
    怎么获取一个文件中单词出现的最高频率
    描述一下你最常用的编程风格
    如果有机会重新设计你们的产品,你会怎么做
    如何搭建一个高可用系统
    如何启动时不需输入用户名与密码
    如何在基于Java的Web项目中实现文件上传和下载
    如何实现一个秒杀系统,保证只有几位用户能买到某件商品。
    如何实现负载均衡,有哪些算法可以实现
    如何设计一个购物车?想想淘宝的购物车如何实现的
    如何设计一套高并发支付方案,架构如何设计
    如何设计建立和保持 100w 的长连接
    如何避免浏览器缓存。
    如何防止缓存雪崩
    如果AB两个系统互相依赖,如何解除依
    如果有人恶意创建非法连接,怎么解决
    如果有几十亿的白名单,每天白天需要高并发查询,晚上需要更新一次,如何设计这个功能
    如果系统要使用超大整数(超过long长度范围),请你设计一个数据结构来存储这种超大型数字以及设计一种算法来实现超大整数加法运算)
    如果要设计一个图形系统,请你设计基本的图形元件(Point,Line,Rectangle,Triangle)的简单实现
    如果让你实现一个并发安全的链表,你会怎么做
    应用服务器与WEB 服务器的区别?应用服务器怎么监控性能,各种方式的区别?你使用过的应用服务器优化技术有哪些
    大型网站在架构上应当考虑哪些问题
    有没有处理过线上问题?出现内存泄露,CPU利用率标高,应用无响应时如何处理的
    最近看什么书,印象最深刻的是什么
    描述下常用的重构技巧
    你使用什么版本管理工具?分支(Branch)与标签(Tag)之间的区别在哪里
    你有了解过存在哪些反模式(Anti-Patterns)吗
    你用过的网站前端优化的技术有哪些
    如何分析Thread dump
    你如何理解AOP中的连接点(Joinpoint)、切点(Pointcut)、增强(Advice)、引介(Introduction)、织入(Weaving)、切面(Aspect)这些概念
    你是如何处理内存泄露或者栈溢出问题的
    你们线上应用的 JVM 参数有哪些
    怎么提升系统的QPS和吞吐量
    知识面

    解释什么是 MESI 协议(缓存一致性)
    谈谈 reactor 模型
    Java 9 带来了怎样的新功能
    Java 与 C++ 对比,C++ 或 Java 中的异常处理机制的简单原理和应用
    简单讲讲 Tomcat 结构,以及其类加载器流程
    虚拟内存是什么
    阐述下 SOLID 原则
    请简要讲一下你对测试驱动开发(TDD)的认识
    CDN实现原理
    Maven 和 ANT 有什么区别
    UML中有哪些常用的图
    Linux
    Linux 下 IO 模型有几种,各自的含义是什么。
    Linux 系统下你关注过哪些内核参数,说说你知道的
    Linux 下用一行命令查看文件的最后五行
    平时用到哪些 Linux 命令
    用一行命令输出正在运行的 Java 进程
    使用什么命令来确定是否有 Tomcat 实例运行在机器上
    什么是 N+1 难题
    什么是 paxos 算法
    什么是 restful,讲讲你理解的 restful
    什么是 zab 协议
    什么是领域模型(domain model)?贫血模型(anaemic domain model) 和充血模型(rich domain model)有什么区别
    什么是领域驱动开发(Domain Driven Development)
    介绍一下了解的 Java 领域的 Web Service 框架
    Web Server、Web Container 与 Application Server 的区别是什么
    微服务(MicroServices)与巨石型应用(Monolithic Applications)之间的区别在哪里
    描述 Cookie 和 Session 的作用,区别和各自的应用范围,Session工作原理
    你常用的持续集成(Continuous Integration)、静态代码分析(Static Code Analysis)工具有哪些
    简述下数据库正则化(Normalizations)
    KISS,DRY,YAGNI 等原则是什么含义
    分布式事务的原理,优缺点,如何使用分布式事务?
    布式集群下如何做到唯一序列号
    网络
    HTTPS 的加密方式是什么,讲讲整个加密解密流程
    HTTPS和HTTP的区别
    HTTP连接池实现原理
    HTTP集群方案
    Nginx、lighttpd、Apache三大主流 Web服务器的区别
    是否看过框架的一些代码
    持久层设计要考虑的问题有哪些?你用过的持久层框架有哪些
    数值提升是什么
    你能解释一下里氏替换原则吗
    你是如何测试一个应用的?知道哪些测试框架
    传输层常见编程协议有哪些?并说出各自的特点
    编程题

    计算加班费

    加班10小时以下加班费是时薪的1.5倍。加班10小时或以上,按4元/时算。提示:(一个月工作26天,一天正常工作8小时)

    计算1000月薪,加班9小时的加班费
    计算2500月薪,加班11小时的加班费
    计算1000月薪,加班15小时的加班费
    卖东西

    一家商场有红苹果和青苹果出售。(红苹果5元/个,青苹果4元/个)。

    模拟一个进货。红苹果跟青苹果各进200个。
    模拟一个出售。红苹果跟青苹果各买出10个。每卖出一个苹果需要进行统计。
    提示:一个苹果是一个单独的实体。

    日期提取

    有这样一个时间字符串:2008-8-8 20:08:08 , 请编写能够匹配它的正则表达式,并编写Java代码将日期后面的时分秒提取出来,即:20:08:08

    线程

    8设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
    用Java写一个多线程程序,如写四个线程,二个加1,二个对一个变量减一,输出
    wait-notify 写一段代码来解决生产者-消费者问题
    数字

    判断101-200之间有多少个素数,并输出所有素数
    用最有效率的方法算出2乘以17等于多少
    有 1 亿个数字,其中有 2 个是重复的,快速找到它,时间和空间要最优
    2 亿个随机生成的无序整数,找出中间大小的值
    10 亿个数字里里面找最小的 10 个
    1到1亿的自然数,求所有数的拆分后的数字之和,如286 拆分成2、8、6,如1到11拆分后的数字之和 => 1 + … + 9 + 1 + 0 + 1 + 1
    一个数如果恰好等于它的因子之和,这个数就称为 “完数 “。例如6=1+2+3.编程 找出1000以内的所有完数
    一个数组中所有的元素都出现了三次,只有一个元素出现了一次找到这个元素
    一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
    求100-1000内质数的和
    求1到100的和的平均数
    求s=a+a+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 求出1到100的和
    算出1到40的质数,放进数组里
    显示放组里的数
    找出第[5]个数
    删除第[9]个数,再显示删除后的第[9]个
    有 3n+1 个数字,其中 3n 个中是重复的,只有 1 个是不重复的,怎么找出来。
    有一组数1.1.2.3.5.8.13.21.34。写出程序随便输入一个数就能给出和前一组数字同规律的头5个数
    计算指定数字的阶乘
    开发 Fizz Buzz
    给定一个包含 N 个整数的数组,找出丢失的整数
    一个排好序的数组,找出两数之和为m的所有组合
    将一个正整数分解质因数。例如:输入90,打印出90=233*5。
    打印出所有的 “水仙花数 “,所谓 “水仙花数 “是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 “水仙花数 “,因为153=1的三次方+5的三次方+3的三次方
    原地交换两个变量的值
    找出4字节整数的中位数
    找到整数的平方根
    实现斐波那契
    网络

    用Java Socket编程,读服务器几个字符,再写入本地显示
    反射

    反射机制提供了什么功能?
    反射是如何实现的
    哪里用到反射机制
    反射中 Class.forName 和 ClassLoader 区别
    反射创建类实例的三种方式是什么
    如何通过反射调用对象的方法
    如何通过反射获取和设置对象私有字段的值
    反射机制的优缺点
    数据库

    写一段 JDBC 连Oracle的程序,并实现数据查询
    算法

    50个人围坐一圈,当数到三或者三的倍数出圈,问剩下的人是谁,原来的位置是多少
    实现一个电梯模拟器用
    写一个冒泡排序
    写一个折半查找
    随机产生20个不能重复的字符并排序
    写一个函数,传入 2 个有序的整数数组,返回一个有序的整数数组
    写一段代码在遍历 ArrayList 时移除一个元素
    古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少
    约瑟芬环游戏
    正则

    请编写一段匹配IP地址的正则表达式
    答:
    写出一个正则表达式来判断一个字符串是否是一个数字
    字符串

    写一个方法,入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数。
    写一个程序找出所有字符串的组合,并检查它们是否是回文串
    写一个字符串反转函数,输入abcde转换成edcba代码
    小游戏,倒转句子中的单词
    将GB2312编码的字符串转换为ISO-8859-1编码的字符串
    请写一段代码来计算给定文本内字符“A”的个数。分别用迭代和递归两种方式
    编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”
    给定 2 个包含单词列表(每行一个)的文件,编程列出交集
    打印出一个字符串的所有排列
    将一个键盘输入的数字转化成中文输出(例如:输入1234567,输出:一百二拾三万四千五百六拾七)
    在Web应用开发过程中经常遇到输出某种编码的字符,如从 GBK 到 ISO8859-1等,如何输出一个某种编码的字符串
    日期

    计算两个日期之间的差距

  • 相关阅读:
    Cannot allocate memory(1)
    tomcat server.xml配置属性
    HTB-靶机-Nibbles
    HTB-靶机-CrimeStoppers
    HTB-靶机-FluxCapacitor
    HTB-靶机-Bashed
    HTB-靶机-Inception
    HTB-靶机-Fulcrum
    HTB-靶机-Ariekei
    HTB-靶机-Enterprise
  • 原文地址:https://www.cnblogs.com/lookabc/p/12523579.html
Copyright © 2011-2022 走看看