JAVA面试题1-1

JAVA面向对象都有哪些特征?

继承:复用的概念
多态:多态是父亲生产儿子,但是是儿子在使用
封装:也是增加了复用性

ArrayList 和 LinkedList的区别

ArrayList 是基于数组来底层实现的。可以O(1)的时间随机访问
LinkedList插入,添加,删除操作速度更快,不需要像数组那样重新计算大小或者更新索引。

高并发中的集合有哪些问题?

第一代:高并发

Vector hashtable 一开始为了保证线程安全:使用synchronized修饰方法
缺点:效率低下

第二代:线程非安全集合类

ArrayList 、HashMap
线程不安全,但是性能好,用来代替vector和hashtable
需要线程安全的时候:Collections.synchronizedList(list) 、Collections.synchronizedMap(m);

底层使用synchronized代码块锁

第三代:线程安全集合类

在大量并发情况下如何提高集合效率和安全呢?
java.util.concurrent.*

JDK1.8的新特性有哪些?

1、接口的默认方法 也是为了适配lambda表达式
Java 8 允许我们给接口添加一个非抽象的方法实现,只需要default关键字就可以,这种特性又叫做扩展方法。

2、lambda 表达式,简化了函数式编程
例如Collections.sort(names,(a,b)->b.compareTo(a));

3、stream接口

java.util.Stream 表示能应用在一组元素上一次执行的操作序列。Stream操作分为中间操作或者最终操作两种,最终操作返回一特定类型的计算结果。而中间操作返回stream本身,这样你就可以将多个操作依次串起来。

Stream的创建需要指定一个数据源,比如java.util.Collection类

4、Annotation注解
java8支持多重注解,首先定义一个包装类Hints注解用来放置一组具体的Hint注解:
代码如下:
@interface Hints{Hint[] value();}
@Repeatable(Hints.class) @interface Hint{String value();}
Java 8 允许我们把同一个类型的注解使用多次,只需要给该注解标注一下@Repeatable即可

老方法

@Hints({ @Hint(“hint1”), @ Hint(“hint2”)}) class Person{}

使用多重注解

@Hint(hint1) @Hint(hint2) class PersonI{}

抽象类和接口有什么区别

能够想象到的抽象概念使用抽象类:食物,动物,植物,人类
接口描述的是特征:flyable 可以飞,可以游泳,可以跑,可以跳

spring cloud 核心组件有哪些?分别有哪些作用

服务注册与发现–Netflix Eureka、Nacos、Zookeeper
客户端负载均衡–Netfilx Ribbon、SpringCloud LoadBalancer
服务熔断器–Netfilx Hystrix、Alibaba Sentinel 、Resilence4J
服务网关–Netfilx zuul、SpringCloud Gateway
服务接口调用–Netflix Feign、Resttemplate、Openfeign
链路追踪–Netflix Sleuth、Skywalking。 Pinpoint
聚合Hystrix监控数据–Netflix Turbine
监控中心—SpringBoot Admin
配置中心—Spring Cloud Config、Apollo、nacos

微服务架构原理是什么?

主要是面向SOA理念,更小粒度服务的拆分,将功能分解到各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java面试题真的很多,下面我来回答一个有关多线程的问题。 在Java中实现多线程有两种方式,一种是继承Thread类,另一种是实现Runnable接口。这两种方式有何区别? 继承Thread类的方式是直接定义一个类继承Thread,并重写它的run()方法。然后创建该类的对象,并调用对象的start()方法来启动线程。这种方式简单直接,但因为Java是单继承的,所以如果某个类已经继承了其他类,就不能再直接继承Thread类实现多线程。 实现Runnable接口的方式是定义一个类实现Runnable接口,并实现其唯一的抽象方法run()。然后创建Thread类的对象,将实现了Runnable的对象作为参数传递给Thread类的构造方法。最后调用Thread对象的start()方法来启动线程。这种方式灵活性更大,因为Java允许一个类实现多个接口,所以即使某个类已经继承了其他类,仍然可以通过实现Runnable接口来实现多线程。 另一个区别在于资源共享的问题。继承Thread类的方式,不管是数据还是方法,都是线程自己拥有的,不存在共享的情况。而实现Runnable接口的方式,多个线程可以共享同一个对象的数据和方法,因为多个线程共同操作的是同一个Runnable对象。 总结来说,继承Thread类方式简单直接,但只能通过单继承来实现多线程;实现Runnable接口方式更灵活,可以解决单继承的限制,并且多个线程可以共享同一个Runnable对象的数据和方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值