JAVA-FAQ文档

1.java底层是如何运行的?

        答:先通过javac将Java源文件编译成字节码(.class文件)--JVM加载并运行.class文件(JVM加载时需要调用lib库来编译.class文件)

2.为什么Java中只能单一继承?

        答:Java中类不能多继承类是为了安全。因为无论是抽象类还是非抽象类都包含非抽象的方法(非抽象类也可能没有),当类可以多继承类时,被继承的不同的父类可能会有同名同参的方法,如果子类也没有重写这个同名同参的方法,则在子类的实例调用这个方法的时候就会出现冲突。

3.如果给定一个集合,如何进行排序?

        答:通过collections的sort方法(前提是基本数据类型);如果给对象排序的话,该对象需要实现Comparable接口,然后调用Collections的sort()里面需指定list和Comparator对象并重写compare(里面是两个比较的对象),例:

 public static void main( String[] args ){
    	Person p=new Person();
    	p.setName("张三");
    	p.setAge(23);
    	p.setAddress("太原");
    	
    	Person p2=new Person();
    	p2.setName("李四");
    	p2.setAge(20);
    	p2.setAddress("大同");
    	
    	Person p3=new Person();
    	p3.setName("王五");
    	p3.setAge(18);
    	p3.setAddress("西安");
    	
    	List<Person>list=new ArrayList<Person>();
    	list.add(p);
    	list.add(p2);
    	list.add(p3);
    	
    	Collections.sort(list, new Comparator() {

			@Override
			public int compare(Object o1, Object o2) {
				
				return ((Person)o1).getAge()-((Person)o2).getAge();
			}
		});
    	System.out.println(list);
    	    	
    }
	
    
}

注意:Set集合添加及本来型数据输出的是排序后的结果,原因是hoshCode值导致的,而且Set所说的无序指的是插入的数据时的顺序与输出的时的顺序不一致。

4.如何实现字符串的反转?

        答:

                1)通过StringBuilder的reverse()方法,他会将字符串序列被序列的相反代替

                2)通过String的charAt()方法获取每个字符你,然后与新的空字符串连接。

5.包装类与基本类型的区别?

        答:

                1)包装类型可以为null,基本类型不可以   

class Writer {
    private Integer age;
    private String name;

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

呢么为什么pojo的属性必须要用包装类想呢?

《阿里巴巴 Java 开发手册》上有详细的说明
数据库的查询结果可能是 null,如果使用基本类型的话,因为要自动拆箱(将包装类型转为基本类型,比如说把 Integer 对象转换成 int 值),就会抛出 NullPointerException 的异常。

                2.)包装类型可以用于泛型,而基本类型不可以(泛型的类型只能为引用类型)

List<int> list=new ArrayList<>();
//会有错误提示:Syntax error, insert "Dimensions" to complete ReferenceType(语法不允许)
List<Integer> list = new ArrayList<>();

                3.)基本类型比包装类型更高效

基本类型在栈中直接存储的具体数值,而包装类型则存储的是堆中的引用

相比较于基本类型而言,包装类型需要占用更多的内存空间。假如没有基本类型的话,对于数值这类经常使用到的数据来说,每次都要通过 new 一个包装类型就显得非常笨重,所以就有了自动拆装箱。

               4.)自动拆装箱

把基本类型转换成包装类型的过程叫做装箱

反之,把包装类型转换成基本类型的过程叫做拆箱

Integer i1=new Integer(10);//手动装箱
int i2=i1.intValue();//手动拆箱


Integer i3=10;//等价于integer i3=Integer.valueOf();
int i4=i3;//等价于int i4=i3.intValue();

          也就是说,自动装箱是通过Integer.valueOf()完成的;自动拆箱是通过 Integer.intValue() 完成的;

6.Tomcat默认的端口号是多少?

        答:默认端口号是:8080,但该端口不是唯一固定的端口,可以根据修改tomcat的配置文件        件(server.xml)修改后重启服务即可。

                weblogic的默认端口号是:7001,weblogic是什么:weblogic_百度百科

                 Oracle数据库默认端口号为:1521。

                 SQL server数据库默认端口号为:1433                                                                           

7.sleep与wait 的区别:

        答:sleep()是Thread类中的静态方法,使调用的线程进入睡眠状态 ,它不会释放锁,当调用 该对象的synchronized方法时,其他线程只能等待该线程结束后方可进入执行,sleep是基于制定的具体休眠时间过后自动唤醒与其他线程争夺CPU资源。

                wait()是object类中的方法,它会释放锁,不会阻塞其他线程,当调用wait方法时会将调用者的线程挂起,直到其他线程调用同一个对象的notify方法才会重新激活调用者。                                         sleep需要捕获异常,而wait,notify,notifyAll则不需要捕获异常。 

        具体案例可看:sleep() 和 wait() 的区别_yinhuanxu-CSDN博客_sleep和wait

8.如何解决git冲突问题?

        答:https://jingyan.baidu.com/article/3ea514898fbf1552e61bbad5.html

                怎样解决git提交代码冲突 - liguangsunls - 博客园                                                              9.  Mysql的数据类型有哪些?

        答: 都知道Java中有int(4个字节)、char(1个字节)...

                这些类型也都不是随便用的,使用前都会考虑是否会越界,是否合适,当然MySQL也一样,同样需要考虑这些因素。

       主要类型有这几个:数值类型、字符串类型、日期和时间类型,详情请见:MySQL 数据类型 | 菜鸟教程//MySQL数据库篇之数据类型 - 暮光微凉 - 博客园

         总结:

  • 如果数据长度都一样,就用char,比如身份证号、手机号
  • 如果数据长度不一样,就用varchar,比如名字、地址,但要保证不越界
  • 定长的磁盘空间比较浪费,但效率高
  • 变长的磁盘空间比较节省,但效率低

  日期和时间类型: 

  • datetime 时间日期格式 ‘yyyy-mm-dd HH:ii:ss’ 表示范围从1000到9999,占用八字节
  • date:日期 ‘yyyy-mm-dd’,占用三字节 
  • timestamp:时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss格式和datetime完全一致,占用四字节

   enum和set

        enum:枚举,单选类型

        语法:

        enum(‘选项1’, ‘选项2’, ‘选项3’…   

        

        set:集合,多选类型

        语法:

        set(‘选项1’, ‘选项2’, ‘选项3’…)  

        例:建一个兴趣爱好调查表votes,比如(游泳、跳舞、弹吉他、滑雪、冲浪)中选择(可以多选),(男、女)【单选】

     create table votes( -> name varchar(20), -> hobby set('游泳','跳舞','弹吉他','滑雪','冲浪'), -> gender enum('男','女') -> );                                                                                                                                                     

 插入数据:

insert into votes values('calm','跳舞,滑雪,游泳','女');
 insert into votes values('lilei','冲浪,弹吉他',1);
 insert into votes values('jane','冲浪,跳舞,弹吉他','2');
 insert into votes values('helon','滑雪','男');

 10.MySQL是否支持delete使用表的别名?

        答:是支持的,只不过不能像select一样直接用,它需要在from关键字前添加别名,例如:

#查询语句:
select * from sys_menus m where m.id=1
#删除语句:
delete from sys_menus m where m.id=154  #错误语法
delete m from sys_menus m where m.id=154 #正确语法

 11.RocketMQ、kafka都是面向微服务大数据领域的

        1)负责消息的存储和转发

        2)消息的生产者、消费者都是服务端应用

12.Dto与Entity的关系

        1)Dto是数据传输对象,主要用于封装前台页面传来的数据在各个层中进行传播(向下传播),定义跟ben一致。

        2)Entity是实体对象,主要用于从数据库里取的数据定义与ben一致,在各个层中传播(向上传播)。

13.finalize()

        该方法是object中的方法,作用就是在垃圾回收器回收对象占用的内存之前,调用该方法会处理被回收对象生前未执行完的任务。

14.struts2

        struts2是一个基于MVC设计模式的Web应用架构,本质上相当于一个servlet,在MVC设计中struts2作为控制器来建立模型与视图之间的数据交互。

15.Jetty

        Jetty是一个轻量级高度可扩展的基于Java的Web服务器和servlet引擎,目的是通过大批量低延迟的支持http/HTTP2和Webservlet等Web协议,在提供了在大性能的同时还保留了servlet开发的兼容性和易用性,可以轻松的嵌入到应用程序中,是一个面向组件技术。

16.Servlet

        全名JavaServlet,又名小服务程序/服务连接器,具有独立于平台和协议的特性。交互的浏览和生成数据,生成动态的Web内容。

17.@Configguration

        1)概述:标志着该类是一个配置类,可替换xml配置文件

        2)注意

                2.1)被注解的类不能是final类型

                2.2)被注解的类不能是匿名类

                2.3)嵌套的configguration必须是静态类

18.常量池

        1)class文件常量池

                主要存储符号引用、字面量、编译时确定的数据

        2)运行时常量池(位于方法区、全局共享)

                主要存储class常量池类加载的文件,运行期间新的变量      

        3)字符串常量池(位于堆中,全局共享)

                可以认为是直接存储的string对象的引用

                字符串常量池本质上是一个HashTable

        字符串放入常量池实际放入的是什么?

        实际上字符串常量池HashTable采用的是链表+数组的结构,链表中的每个节点都是一个HashTableEntry,并将HashTableEntry的value存储到堆中的字符串常量池String对象的引用中。

19.为什么定义变量不用引用类型?

        1)因为引用类型是对象,存储在堆中,需要创建和销毁对象,如果使用完不销毁,会造成内存的占用,导致内存泄漏。

        2)使用基本类型,存储在栈中,存储的是值,减少了对象的创建过程

20.为什么在创建集合的时候指定容量?

        例如:ArrayList a=new ArrayList(5);

        1)如果能够确定集合元素个数时,需要对集合指定大小,这样可以防止集合默认提供的存储空间不足进行扩容而影响程序的性能;防止了实际存储元素的个数小于默认提供的存储容量而造成空间浪费。(由于list采用数组存储元素,存储元素个数大于默认提供的数组容量,内部数组会进行扩容操作,反复的扩容会降低程序的性能)

后续持续更新.....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值