Java每日十道面试题Day01【贵在坚持】

目录

1、IP地址的类型有哪些

2、三次握手过程中可以携带数据吗?

3、线程的调度策略是什么?

4、为什么wait、notify定义在Object中?

5、为什么wait、notify必须在同步方法或同步块中被调用?

6、yield()和sleep()的区别是什么?

7、JVM回收机制

8、面向过程和面向对象的区别

9、SpringCloud和SpringBoot的关系

10、MySql存储引擎MyISAM和InnoDB的区别(重点)


1、IP地址的类型有哪些

IP地址根据网络ID的不同,可以分为5种类型,A类地址、B类地址、C类地址、D类地址和E类地址。

  • A类地址是以0开头的,一共有126个网段,这类地址主要是分配给主干网络使用的

  • B类地址是以10开始的,前两个必须是10,一共有16000多个网段,主要是给中类大小的网络使用的

  • C类地址前三位固定前三位数110,表示每个网段只能连接254台主机

  • D类和E类用的比较少,D类是用来组播开头为1110,E类用来测试以1111开头

2、三次握手过程中可以携带数据吗?

第三次握手可以携带数据,但是前两次不可以。

因为前两次握手时客户端与服务器相互确认的时候,如果携带数据容易被恶意攻击篡改数据,导致服务器不安全数据丢失等状况,也就是说无法保证服务器的安全性。

3、线程的调度策略是什么?

分时调度模型,抢占式调度模型

  • 其中抢占式调度是指每个线程所执行的时间,线程的切换都是由系统进行控制,系统控制的可能会给线程分配同样的时间,可能是有的长有的短,甚至有的线程分配不到时间,这种机制的好处是不会出现线程堵塞的问题,所以JVM优先采用。

  • 分时调度是指某一个线程执行完主动通知系统切换到另一线程执行,这种模式的好处是不会导致线程的同时运行,避免了线程的并发性,线程的执行时间交给线程本身来控制,但他的缺点是如果一个线程出现了问题,运行到一半就堵塞,那么也可能导致整个系统崩溃。

4、为什么wait、notify定义在Object中?

  • JAVA提供的所是对象级别的,每一个对象都有一把称之为monitor监控器的锁,他不是线程级的,通过线程可以获取锁,一个线程可以获取多把锁,Object是所有对象的顶级父类,因此统一把对象锁设置为Object锁,这样Jvm就很容易知道应该从哪个对象锁的等待池中来唤醒线程。

  • wait/notify/notifyAll都是对象级别的锁,如果把他们的方法定义到Thread类中会出现以下问题

    • 如何实现让一个线程有多把锁

    • 怎么明确线程等待的是哪把锁

  • 简单的说,由于wait,notify和notifyAll都是锁级别的操作,所以把他们定义在 Object 类中因为锁属于对象。

5、为什么wait、notify必须在同步方法或同步块中被调用?

因为在wait()方法调用时,会释放对象锁,那么一个线程调用wait()方法的前提是,他必须拥有该对象锁,随后释放并等待,若达到了notify()后,在进入锁

6、yield()和sleep()的区别是什么?

  • sleep()方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程运行的机会,yield()方法只会给相同优先级或者更高优先级的线程以运行的机会;

  • 线程执行sleep()方法后转入阻塞状态,需要被唤醒,而执行yield()方法后转入就绪状态

  • sleep()方法使用时,需要抛出声明InterruptedException,而yield()方法不需要声明异常

7、JVM回收机制

新创建出来的对象一开始都会停留在新生代中,JVM会给每个对象一个年龄计数器,对象每熬过一次GC,年龄就要+1,当对象到达阀值(默认为15)的时候就会被一如到老年代,可通过-XX:MaxTenuringThreshold调整这个阀值

根据对象年龄有另外一个策略也会让对象进入老年代,不用等待15次GC之后进入老年代,他的大致规则就是,假如当前放对象的Survivor,一批对象的总大小大于这块Survivor内存的50%,那么大于这批对象年龄的对象,就可以直接进入老年代了。

还有一种情况,如果设置了-XX:PretenureSizeThreshold这个参数,那么如果创建的对象大于这个参数的值,如分配一个超大的字节数组,此时就会被直接放入老年代。

8、面向过程和面向对象的区别

面向过程:

优点:性能比面向对象高,因为类调用时需要实例化,比较消耗内存资源,例如单片机,嵌入式开发,Linux/Unix等一般都采用面向过程开发,性能是最重要的因素

缺点:没有面向对象容易维护,复用性和扩展性比较弱

面向对象:

优点:易维护,易复用、易扩展,由于面向对象有封装、继承、多态的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护

缺点:性能比较差

总结:面向过程是具体化的,流程化的,解决一个问题你需要一步步的进行分析,一步步的进行实现。

面向对象是模型化的,你只需要抽象出一个类,这是一个封闭的盒子,在这里你拥有数据和解决问题的方法,需要什么功能直接使用就可以了,不必一步步的去实现,面向对象的底层其实还是面向过程,把面向过程抽象成一个类,然后封装起来,方便我们使用就是面向对象。

9、SpringCloud和SpringBoot的关系

  • SpringBoot专注于开发方便的开发单个个体微服务

  • SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个服务之间提供:配置管理、服务发现、断路器、路由、为代理、事件总栈,全局锁,决策竞选,分布式回话等集成服务

  • SpringBoot可以离开SpringCloud独立使用,开发项目,但是SpringCloud不能离开SpirngBoot,属于依赖关系

  • SpringBoot专注于快速、方便的开发单个个体微服务,SpringCloud关注全局的服务治理框架

10、MySql存储引擎MyISAM和InnoDB的区别(重点)

常用的存储引擎有以下:

Innodb引擎:Innodb引擎提供了对数据库ACID事务的支持,并且还提供了行级锁和外键的约束,他的设计目标就是处理大数据容量的数据库系统

MyISAM引擎:不提供事务的支持,也不支持行级锁和外键

MEMORY引擎:所有的数据都存在内存中数据的处理速度快,但是安全性不高

MyISAM和InnoDB的区别

MyISAM没有外键和事务,但是查询快,因为内部维护了一个计数器,可以直接调去,索引的实现方法是B+树索引,是堆表,不支持哈希索引支持全文索引

InnoDB有外键和事务,增删改快,索引的实现方法是B+树索引,索引组织表,支持哈希索引,不支持全文索引

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值