• java 面试题


    1.hashmap、concurrenthashmap底层实现和区别

    hashmap是基于数组+链表结构的,数组下标有hash生成,链表主要是为了防止hash冲突,即使两个对象的hashCode一样,它们会放到当前数组索引位置的链表中,Java8后链表长度大于8就会转为红黑树,
    主要是为了提高查找效率,链表查找慢,增删改快 区别:hashmap是线程不安全的,ConcurrentHashMap是线程安全的,把数据分成了不同的段,使用的分段锁技术,通过hash计算那些数据放在那个段中,查找也是如此

    2.spring框架的原理

    spring框架主要是用来创建、注册、配置、管理、维护bean的容器,主要是利用Java反射技术动态维护、调用对象,主要包括控制反转(IOC)以及面向切面(AOP),三种注入方式分别是Field注入
    (使用@Autowired或@Resource注入)、构造器注入和Setter方法注入

    3.如何写一个orm框架

    对象-关系映射(Object-Relational Mapping,简称ORM),处理对象与数据库交互的,常见的有hibernate、jpa、ibatis等

    4.hibernate一级缓存和二级缓存,hibernate其他缓存

    hibernate缓存分为三种:一级缓存,二级缓存和查询缓存,
    session内的缓存即一级缓存,不能被清除,缓存起来的对象叫做持久化对象,如果在同一个session中去获取这个对象,先查缓存,没有则去查数据库。
    evict(Object o)和clear()管理缓存。
    二级缓存的生命周期和SessionFactory的生命周期一致,可以被其他缓存共享。

    5.hibernate事务传播行为种类

    事物的四个特性:原子性(所有操作全部发生或全部不发生)、一致性(事务执行前和执行后必须处于一致性状态)、隔离性(多个事务相互隔离)、持久性(事务一旦提交,数据就会发生永久性的改变)

    6.springmvc原理

    用户发起请求到前端控制器,然后根据配置找到处理器映射器,然后根据适配器找到对应的controller,controller处理完毕后返回对应的model&view到前端控制器,前端控制器拿着model&view
    到视图解释器进行渲染生成最终的页面返回给用户

    7.restful的好处  

    基于rest API开发的开发规范,尤其是当前后端分离时能够节约时间

    8.restful有几种请求,表单如何提交put请求

    form提交需要在URL中加入提交方式:X-Method-Override=PUT,ajax提交需要在header中加入提交方式:X-Method-Override=PUT

    9.web中安全性问题的考虑,如何防止

    主要包括SQL注入、XSS、越权访问、文件上传漏洞

    10.web系统整体架构

    一、ssh:Struts2+spring+hibernate,Struts2用于分发控制,spring用于管理bean,hibernate用于orm,负责于数据库交互,业务缓存使用memcache,tomcat集群session共享使用redis
    二、springboot+vue:springboot用作后台业务,spring gateway用作网关,spring eurake 用作服务注册发现,业务缓存redis

    11.hibernate如何实现声明式事务

    添加事务管理类的bean、配置事务的通知、添加事务的切入点

    12.java并发包

    https://blog.csdn.net/qq_38357267/article/details/80972942

     13.volatile

    Java 内存模型中的可见性、原子性(原子是世界上的最小单位,具有不可分割性,原子类:AtomicInteger、AtomicLong、AtomicReference)和有序性。volatile只能让被他修饰内容具有可见性,但不能保证它具有原子性.volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值.而声明变量是 volatile 的,JVM 保证了每次读变量都从内存中读,跳过 CPU cache 这一步.

    当一个变量定义为 volatile 之后,将具备两种特性:1.保证此变量对所有的线程的可见性.2.禁止指令重排序优化(多线程下jvm会按照最优规则对代码指令的执行顺序进行重新排序,让CPU的利用率达到最大)。

    16.如何进行反射,如何提高反射的性能

    ReflectASM就是把类的各个方法缓存起来,然后通过case选择,直接调用,因此速度会快上很多。但是它的get方法同样会消耗很大的时间,因此就算是使用ReflectASM的朋友也记得请在启动的时候
    就初始化get方法计入缓存
    MethodAccess access = MethodAccess.get(UserService.class);
    access.invoke(target, "update", 1, "zhangsan");

    17.如何实现java的代理,为什么需要实现接口

    1.在需要继承proxy类获得有关方法和InvocationHandler构造方法传参的同时,java不能同时继承两个类,我们需要和想要代理的类建立联系,只能实现一个接口

    2.需要反射获得代理类的有关参数,必须要通过某个类,反射获取有关方法

    3.成功返回的是object类型,要获取原类,只能继承/实现,或者就是那个代理类

    4.对具体实现的方法内部并不关心,这个交给InvocationHandler.invoke那个方法里去处理就好了,我只想根据你给我的接口反射出对我有用的东西。

    5.考虑到设计模式,以及proxy编者编写代码的逻辑使然
    ---------------------
    作者:XyGoodCode
    来源:CSDN
    原文:https://blog.csdn.net/zxysshgood/article/details/78684229
    版权声明:本文为博主原创文章,转载请附上博文链接!

    1、生成的代理类继承了Proxy,由于java是单继承,所以只能实现接口,通过接口实现 (一个是 InvocationHandler(Interface)、另一个则是 Proxy(Class),这一个类和接口是实现我们动态代理所必须用到的)

    2、从代理模式的设计来说,充分利用了java的多态特性,也符合基于接口编码的规范 

    18.TCP协议三次握手 

    第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;
    第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
    第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手

    19.springmvc用过哪些注解

    @Component 在类定义之前添加@Component注解,他会被spring容器识别,并转为bean。
    @Repository 对Dao实现类进行注解 (特殊的@Component)
    @Service 用于对业务逻辑层进行注解, (特殊的@Component)
    @Controller 用于控制层注解 , (特殊的@Component)
    @RequestMapping 用于处理请求地址映射,可以作用于类和方法上。
    @RequestParam:用于获取传入参数的值
    @PathViriable:用于定义路径参数值
    @ResponseBody:作用于方法上,可以将整个返回结果以某种格式返回,如json或xml格式。
    @CookieValue:用于获取请求的Cookie值
    @ModelAttribute:用于把参数保存到model中
    @SessionAttributes 模型中的数据存储一份到session域中

    20.springAOP可以使用哪些代理,有什么区别

    1.JDK动态代理(原理是使用反射机制)
    2.cglib代理(reflactASM)

    原理区别:

    java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。 

    1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP 
    2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP 
    3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换

    21.为什么要分三层

    低耦合、高内聚(减少模块之间的相互影响)

    1、String、StringBuilder和StringBuffer的区别

    string不可变
    StringBuilder 线程不安全、效率高
    StringBuffer 线程安全、效率低

    2、gc的概念,如果A和B对象循环引用,是否可以被GC?

    不会,无论是分代还是标记清除,都不会标记处于活跃状态的对象,知道虚拟机内存满,gc清无可清的时候,就Error了
    https://blog.csdn.net/kkgbn/article/details/44787149

    3、Java中的内存溢出是如何造成的

    1. 内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
    2. 集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
    3. 代码中存在死循环或循环产生过多重复的对象实体;
    4. 使用的第三方软件中的BUG;
    5. 启动参数内存值设定的过小;
    http://outofmemory.cn/c/java-outOfMemoryError

    4、String s = “123”;这个语句有几个对象产生

    String s = “123”;1个,常量池
    String str=new String("123"); 2个  常量池、堆

    5、Error、Exception和RuntimeException的区别,作用又是什么?

    Error、Exception是Throwable的子类,RuntimeException是Exception的子类,是在程序运行中产生的,是可以通过代码避免的,比如空指针异常、数组越界等。

    6、列举3个以上的RuntimeException

    NullPointerException - 空指针引用异常
    ClassCastException - 类型强制转换异常。
    IllegalArgumentException - 传递非法参数异常。
    ArithmeticException - 算术运算异常
    ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
    IndexOutOfBoundsException - 下标越界异常
    NegativeArraySizeException - 创建一个大小为负数的数组错误异常
    NumberFormatException - 数字格式异常
    SecurityException - 安全异常
    UnsupportedOperationException - 不支持的操作异常
    ---------------------
    作者:魅影猎鹰
    来源:CSDN
    原文:https://blog.csdn.net/qq_32595075/article/details/80059834
    版权声明:本文为博主原创文章,转载请附上博文链接!

    7、reader和inputstream区别

    InputStream,OutputStream  前者为字节输入流,后者为字节输出流。
    Reader   Writer  前者为字符输入流,后者为字符输出流。

    8、hashCode的作用

    改写equals时总是要改写hashCode
    两个相等对象的equals方法一定为true, 但两个hashcode相等的对象不一定是相等的对象。

    9、Object类中有哪些方法,列举3个以上(可以引导)

    getClass()、hashCode()、equals()、clone()、toString()、notify()、notifyAll()、wait()、finalize()

    10、char型变量中能不能存贮一个中文汉字?为什么?

    char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。

    11、列举几个Java Collection类库中的常用类

    集合类主要指用于描述集合的相关类和接口,顶层集合分别是:Collection接口和Map接口

    其中java.util.Collection集合操作元素的基本单位是:单个元素;(一个元素一个元素的放)

    其中java.util.Map集合操作元素的基本单位是:单对元素;(一对一对的元素放)

    在以后的开发中Collection接口本身很少使用,更多的使用该接口的子接口:List接口、Queue接口以及Set接口。
    ---------------------
    作者:CarolLXW
    来源:CSDN
    原文:https://blog.csdn.net/carolcoral/article/details/78722074
    版权声明:本文为博主原创文章,转载请附上博文链接!

    12、List、Set、Map是否都继承自Collection接口?

    List、Set继承自Collection接口

    13、HashMap和Hashtable的区别

    HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。
    HashMap线程不安全,速度快
    Hashtable线程安全,速度慢

    14、HashMap中是否任何对象都可以做为key,用户自定义对象做为key有没有什么要求?

    用户自定义对象要重载hashcode() 与equals()方法

    15、interface 和 abstrat class的区别 是否可以继承多个接口,是否可以继承多个抽象类

    单继承、但可以实现多个接口

    16、 启动一个线程是用run()还是start()? 多线程有几种实现 同步和并发是如何解决的 什么叫守护线程,用什么方法实现守护线程(Thread.setDeamon()的含义) 如何停止一个线程? 解释是一下什么是线程安全?举例说明一个线程不安全的例子。解释Synchronized关键字的作用。 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

    start(),继承Thread或者实现runnable接口,

    (1) thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个IllegalThreadStateException异常。你不能把正在运行的常规线程设置为守护线程。
    (2) 在Daemon线程中产生的新线程也是Daemon的。
    (3) 不要认为所有的应用都可以分配给Daemon来进行服务,比如读写操作或者计算逻辑。

    API说明如下:

    void setDaemon(boolean on) 标志着该线程是 守护线程或用户线程。
    1

    ---------------------
    作者:ckinghan58
    来源:CSDN
    原文:https://blog.csdn.net/ckinghan58/article/details/72473333
    版权声明:本文为博主原创文章,转载请附上博文链接!

    17、了解过哪些JDK8的新特性,举例描述下相应的特性?

    一、Lambda表达式

    二、流

    三、方法引用

    四、默认方法

    六、日期/时间改进

    https://www.cnblogs.com/pkufork/p/java_8.html

    18、对sql进行优化的原则有哪些?

    https://www.cnblogs.com/exe19/p/5786806.html
    https://www.cnblogs.com/lddbupt/p/5781831.html

    19、servlet生命周期是生命与cgi的区别?

    Servlet的生命周期主要由3个过程组成。

    (1)init()方法:服务器初始化servlet。

    (2)service()方法:初始化完毕,servlet对象调用该方法响应客户的请求。

    (3)destroy()方法:调用该方法消灭servlet对象。

    其中,init()方法只在servlet第一次被请求加载的时候被调用一次,当有客户再请求servlet服务时,web服务器将启动一个新的线程,在该线程中,调用service方法响应客户的请求。

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
    ---------------------
    作者:yanghaitao_1990
    来源:CSDN
    原文:https://blog.csdn.net/yanghaitao_1990/article/details/51723512
    版权声明:本文为博主原创文章,转载请附上博文链接!

    (转)Java三年经验 - 面试总结:https://www.cnblogs.com/zhiqsyr/p/4167284.html

    private、默认、protected、public作用范围

    1)private,同类
    2)默认,同类、同包,不写时默认为friendly
    3)protected,同类,同包,子类 

    4)public,所有

    String trim的实现原理

    先从char数组左边开发便利,遇到ascii小于等于空格的便记下下标位置,然后从右边开始遍历,遇到ascii小于等于空格的同样也记下下标位置,最后截取这两个下标之间的内容,源码如下:
    
    public String trim() {
    int len = value.length;
    int st = 0;
    char[] val = value; /* avoid getfield opcode */

    while ((st < len) && (val[st] <= ' ')) {
    st++;
    }
    while ((st < len) && (val[len - 1] <= ' ')) {
    len--;
    }
    return ((st > 0) || (len < value.length)) ? substring(st, len) : this;
    }

    抽象类与接口的异同

    同:具有抽象方法
    异:1)抽象类可以有构造器,非抽象方法,非公有属性,仅可以单继承抽象类
       2)接口仅有公有抽象方法或者公有静态常量,可以同时实现多个接口
    个人使用经验:一般在控制层使用抽象类,提取公共初始化方法、框架定制化工具方法等
    一般会在业务层使用接口

    数据库性能调优

    1)经常做查询条件的字段建立序列
    2)关联查询时,关联结果集,替代直接关联整张表;或者使用exists

    Struts的Action是单例吗

    1)Struts1的Action是单例且线程安全
    2)Struts2的Action不是单例,针对每一请求产生一个实例

    Hibernate与Mybatis区别

    1)Hibernate,使用pojo实现orm,查询速度相比较慢,插入/更新开发容易
    2)Mybaits,使用纯sql开发,执行效率较快,比较适合统计、多表关联查询

    Hibernate状态

    瞬时态:new对象
    持久态:实例与数据库中记录对应,拥有持久化标识
    游离态:session关闭;session打开,游离态转成持久态

    ibatis中#与$的区别

    1)#,变量替换,即prepareStament设置字段值,并可以匹配变量类型
    2)$,字符串拼接,需要小心依赖注入
    https://www.cnblogs.com/tyhJava/p/5842594.html

    事务特性

    1)原子性:诸多操作要么全做,要么全不做
    2)一致性:事务执行结果使数据库从一个一致性状态变到另一个一致性状态
    3)隔离性:事务执行不被其他事务影响
    4)持久性:一旦提交,对数据库的改变是永久性的

    (转)Java开发面试题,3年工作经验的Java程序员面试经:https://www.cnblogs.com/yuxiang1/p/9253876.html

     Collection和Collections区别

    java.util.Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。
    Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。

    short s1; s1=s1+1;是否有错?

    1.高位转低位需要强制转换            
    
    2.低位转高位自动转.

    Overriding和Overloading区别

    重写(Overriding)是父类与子类之间多态性的一种表现,而重载(Overloading)是一个类中多态性的一种表现。

      如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)  。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了.  

      如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型或有不同的参数次序,则称为方法的重载(Overloading)。不能通过访问权限、返回类型、抛出的异常进行重载. 

    Set里面的元素不能重复,用什么方法区分重复与否

    Set 里的元素是不能重复的,元素重复与否是使用 equals()方法进行判断的。
    equals()和==方法决定引用值是否指向同一对象 equals()在类中被覆盖,为的是当两个
    分离的对象的内容和类型相配的话,返回真值。

    error和exception区别。

    Exception:

    1.可以是可被控制(checked) 或不可控制的(unchecked)。

    2.表示一个由程序员导致的错误。

    3.应该在应用程序级被处理。

    Error:

    1.总是不可控制的(unchecked)。

    2.经常用来用于表示系统错误或低层资源的错误。

    3.如何可能的话,应该在系统级被捕捉。

    abstract class和interface 的区别。

    两种的语法区别 
    1. 抽象类可以有构造方法,接口不能有构造方法 
    2. 抽象类中可以有普通成员变量,接口中没有普通成员变量 
    3. 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须是抽象的,不能有非抽象的普通方法 
    4. 抽象类中抽象方法的访问类型可以是public,protected和默认类型虽然(eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型,并且默认即为public abstract类型 
    5. 抽象类中可以包含静态方法,接口中不能包含静态方法 
    6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型 
    7. 一个类可以实现多个接口,但只能继承一个抽象类
    --------------------- 
    作者:Sally-he 
    来源:CSDN 
    原文:https://blog.csdn.net/qq_31059475/article/details/70651750 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    Java中,是否可以继承String类?为什么?

    不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允许改变。

    try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会不会被执行,什么时候被执行,在 return 前还是后?

    会在return中间执行!
    
    try 中的 return 语句调用的函数先于 finally 中调用的函数执行,也就是说 return 语句先执行,finally 语句后执行,但 return 并不是让函数马上返回,而是 return 语句执行后,
    将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行 finally 语句后才真正开始返回!但此时会出现两种情况: ①、如果finally中也有return,则会直接返回并终止程序,函数栈中的return不会被完成!; ②、如果finally中没有return,则在执行完finally中的代码之后,会将函数栈中的try中的return的内容返回并终止程序; catch同try;

    用最有效的方式算出2*8等于几

    2*8=2 << 3;
    因为将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,而位运算cpu直接支持的,效率最高,所以,2乘以8等於几的最效率的方法是2 << 3package java基础题目;
     
    /*
    * 用最有效的方式算出2*8等于几
    */
    public class Test9 {
    public static void main(String[] args) {
    int a = 2 << 3;
    System.out.println("2左移3位是:" + a);
    }
     
    }
    --------------------- 
    作者:_自由意志 
    来源:CSDN 
    原文:https://blog.csdn.net/johnWcheung/article/details/52937680 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    两个对象值相同(x.equals(y) == true),Hashcode是否一定相同?

    两个对象值相同(x.equals(y) == true),Hashcode是否一定相同,这个要分两种情况回答?
    
    第一种情况回答:
    
    答:假如这个类没有重写equals方法,如果两个对象值相同(x.equals(y) == true),那么那么它们的hashCode值一定要相同;
    
    第二种情况回答:
    
    答:但是如果重写equals方法,没有重写hashCode的方法,就会出现不相等的情况。
    
    Java对于eqauls方法和hashCode方法是这样规定的:
    
    1.如果两个对象相同,那么它们的hashCode值一定要相同;
    
    2.如果两个对象的hashCode相同,它们并不一定相同(这里说的对象相同指的是用eqauls方法比较)。  
       如不按要求去做了,会发现相同的对象可以出现在Set集合中,同时,增加新元素的效率会大大下降。
    3.equals()相等的两个对象,hashcode()一定相等;equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。
    
            换句话说,equals()方法不相等的两个对象,hashcode()有可能相等(我的理解是由于哈希码在生成的时候产生冲突造成的)。反过来,hashcode()不等,一定能推出equals()也不等;
    hashcode()相等,equals()可能相等,也可能不等。
    --------------------- 作者:改变123456 来源:CSDN 原文:https://blog.csdn.net/zouliping123456/article/details/82692127 版权声明:本文为博主原创文章,转载请附上博文链接!

    switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

     
    在switch(expr1)中,expr1只能是一个整数表达式【byte,short,char,int】或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char
    都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,
    所以,它们不能作用于swtich语句中【JDK1.7以前的版本】。
    --------------------- 作者:ISPEAKFORMYSELF 来源:CSDN 原文:https://blog.csdn.net/ISPEAKFORMYSELF/article/details/51931318 版权声明:本文为博主原创文章,转载请附上博文链接!

    ArrayList和Vector的区别,HashMap和Hashtable的区别

    就ArrayList与Vector主要从二方面来说. 
    
    一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的 
    
    二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
    
    
    就HashMap与HashTable主要从三方面来说。 
    
    一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现 
    
    二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的 
    
    三.值:只有HashMap可以让你将空值作为一个表的条目的key或value

    Java的参数传递是「按值传递」还是「按引用传递」?

    当一个对象被当作参数传递到一个方法后,在此方法内可以改变这个对象的属性,那么这里到底是「按值传递」还是「按引用传递」? 
      答:是按值传递。Java 语言的参数传递只有「按值传递」。当一个实例对象作为参数被传递到方法中时,参数的值就是该对象的引用的一个副本。指向同一个对象,对象的内容可以在被调用的方法内改变,
    但对象的引用(不是引用的副本) 是永远不会改变的。


    GC是什么,为什么要有GC,简单介绍GC。

    https://blog.csdn.net/leisure_life/article/details/74529253

    float型float f=3.4是否正确

    答案:不正确。 
    原因:精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4 或float f = 3.4f 
    在java里面,没小数点的默认是int,有小数点的默认是 double; 
    编译器可以自动向上转型,如int 转成 long 系统自动转换没有问题,因为后者精度更高 
    double 转成 float 就不能自动做了,所以后面的加上个 f;

    Java-Collection Framework学习要点

    https://blog.csdn.net/zolalad/article/details/11368561

    如在COLLECTION框架中,实现比较要实现什么样的接口?

    Collection框架中实现比较要实现Comparable 接口和 Comparator 接口

    面向对象的特征

    面向对象编程有三大特性:封装、继承、多态。

    String属于是基本数据类型吗?为什么?

    java 中String 是个对象,是引用类型 ,基础类型与引用类型的区别是,基础类型只表示简单的字符或数字,引用类型可以是任何复杂的数据结构 ,基本类型仅表示简单的数据类型,
    引用类型可以表示复杂的数据类型,还可以操作这种数据类型的行为 。 java虚拟机处理基础类型与引用类型的方式是不一样的,对于基本类型,java虚拟机会为其分配数据类型实际占用的内存空间,而对于引用类型变量,他仅仅是一个指向堆区中某个实例的指针。
    --------------------- 作者:我和普京一样酷 来源:CSDN 原文:https://blog.csdn.net/leon_is_sad/article/details/79997064 版权声明:本文为博主原创文章,转载请附上博文链接!

    heap和stack区别

    java 的内存分为两类,一类是栈内存,一类是堆内存。栈内存是指程序进入一个方法时,
    会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法
    结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。
    堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据,例如,使用 new
    创建的对象都放在堆里,所以,它不会随方法的结束而消失。 方法中的局部变量使用 final
    修饰后,放在堆中,而不是栈中。 
     
     
     
     
    区别:
    1.heap是堆,stack是栈。
    2.stack的空间由操作系统自动分配和释放,heap的空间是手动申请和释放的,heap常用new关键字来分配。
    
    3.stack空间有限,heap的空间是很大的自由区。
    
    在Java中,
    
    若只是声明一个对象,则先在栈内存中为其分配地址空间,
    
    若再new一下,实例化它,则在堆内存中为其分配地址。
    
    4.举例:
    
    数据类型 变量名;这样定义的东西在栈区。
    
    如:Object a =null; 只在栈内存中分配空间
    
    new 数据类型();或者malloc(长度);    这样定义的东西就在堆区
    
    如:Object b =new Object(); 则在堆内存中分配空间

    描述一下JVM加载Class文件的原理和机制

    https://blog.csdn.net/weisg81/article/details/77415937

    java中会存在内存泄漏吗,请简单描述

    https://www.cnblogs.com/Berryxiong/p/6220890.html

    什么是Java序列化,如何实现Java序列化?

    https://blog.csdn.net/qq_39602750/article/details/79273516

    写clone()方法时,通常都有一行代码

    clone 有缺省行为,super.clone();因为首先要把父类中的成员复制到位,然后才是复制自己的成员。

    写出一种11位手机号的正则表达式

    ^[1][3,4,5,7,8][0-9]{9}$

    sleep和wait的区别。

    对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。
    
    sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。
    
    在调用sleep()方法的过程中,线程不会释放对象锁。
    
    而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备
    
    获取对象锁进入运行状态。

    (转)三年java经验面试总结:https://blog.csdn.net/u010664947/article/details/78518456/

    (转)面试阿里巴巴技术开发岗位是什么样的流程?:https://www.zhihu.com/question/40912176

    (转)Vue面试中,经常会被问到的面试题/Vue知识点整理:https://segmentfault.com/a/1190000016344599

    (转)面试总结之[JDK1.8新特性]:https://blog.csdn.net/hequan199411/article/details/81713827

    (转)谈谈对红黑树的理解:https://www.cnblogs.com/liushaojie/p/10273679.html

     
  • 相关阅读:
    java线程
    面向切面编程
    控制反转IOC与依赖注入DI
    phpexecel 导入导出,格式
    PHPExcel设置数据格式的几种方法
    九度oj 题目1416:猴子吃坚果
    九度oj 题目1397:查找数段
    poj 1065 Wooden Sticks
    poj 3181 Dollar Dayz
    poj 1742 Coins
  • 原文地址:https://www.cnblogs.com/ViokingJava/p/10512414.html
Copyright © 2020-2023  润新知