架构师:说一说什么是面向对象?

今天,在和大家分享一篇面经。面试的是一家做公寓运营管理的公司,是铂涛集团下的一家子公司。此次面试分为两轮,一轮是技术主管面试,过了后是架构师面试。自己是挂在了架构面,所以为了总结面试经验,复盘一下知识盲区,就和大家分享下面试问的部分问题(只能回忆起记得住的问题),一起交流一下。并在文末准备了一些简历模板,有需要的同学可以免费领取。

String str = "123" 和 String str = new String("123")有什么区别?

答:String str = "xxx"声明的是一个常量,JVM会将其分配到常量池中

      String str = new String("xxx")声明的是一个对象,JVM会在堆中创建          一 个对象,并把这个对象的引用地址存放在栈中

ArrayList和LinkedList的区别?

答: 相同点

  • 都实现了List接口

  • 非线程安全的

  • 集合中的元素都是有序的

       不同点:

        ArrayList 底层采用数组来存储元素的。数组通过下标访问元素是非常快的,但是插入或者删除元素会涉及到后面元素的移动,所以效率会慢一些。
       LinkedList 底层采用双向链表来存储元素的。链表中插入和删除只需要调整一下指针的指向就行了,所以非常快。

StringBuilder与StringBuffer的区别?

答:StringBuffer和StringBuilder都继承自抽象类AbstractStringBuilder;

StringBuffer的方法大多用了synchronized关键字,所以是线程安全的,

StringBuilder线程不安全

Hibernate里实体类用int类型和integer类型的区别?

答:如果数据库字段值是null的话,用int会报错。

  • int是基本数据类型,声明的是变量,默认是0

  • integer是封装类型,声明的是对象,默认是null

Hibernate实体类是否必须要有无参构造函数?

答:是的,必须要有。因为会调用默认构造方法来构造实例对象。如果实体类没有写,虚拟机会通过无参构造器提供。

Java里什么是反射?

答:Java的反射就是指,在运行过程中,对于任意一个类,都能知道这个类的所有属性和方法。

线程的三种创建方式?

答:

  • 继承Thread类,实现run()方法,无返回值,不可抛异常

  • 实现Runable接口,使用run()方法创建,无返回值,不可抛异常

  • 实现Callable接口,使用call()方法创建,可以有返回值

Redis的数据结构有哪些?分别应用在哪些场景?

答:

  • String类型,一般用于需要计数的场景,例如:用户的访问次数、点赞数

  • List类型,可用于发布与订阅的消息队列

  • Hash类型,用于系统对象数据的存储

  • Set类型,用于存放的数据不能重复以及需要获取多个数据源的交集和并集场景,例如:共同关注、共同粉丝

  • Zset类型,用于需要对数据按某个权重进行排序的场景,例如:直播系统中的排行榜

说说什么是面向对象,除了三大特性还有哪些理解?

答:要回答好这个问题很不容易,毕竟这个题太抽象了,都是一些思维化的东西,面向对象编程思想的创始人之一Alan Kay总结了这五条面向对象的法则,我们一起来理解一下。

  • 万物皆为对象

可以将现实生活中的任何事物都看作是(抽象为)一个对象(Object),对象的特点是:拥有自身的属性行为能力。

  • 程序是对象的集合,他们通过发送消息来告知彼此所要做的

对象和对象之间不是完全独立的,他们可以通过互相发送“消息”来沟通。对象既然拥有行为能力,那么他们可以为其他对象做一些事,前面指的“发消息”,事实上就是指对对象的方法的调用。

  • 每个对象都有自己的由其他对象所构成的存储。

每个对象都可以包含其他对象,比如“汽车对象”可以包含“轮子对象”。这样就能够通过包含关系来构建复杂的体系,比如你需要构建“火箭对象”,那必然是各个系统对象的组合,各个系统对象又是由更小的模块对象组成的。

  • 每个对象都拥有其类型

这个很好理解,万事万物都有其类型,比如我们人类就是一个“类型”。编程语言中通常用class来定义类型

  • 某一特定类型的所有对象都可以接收同样的消息。

这句话可能有点难理解,什么是“某一特定类型的所有对象”?这就是“多态”,举个最通俗的例子,一只猫是“美短”类型的猫,一只猫是“布偶”类型的猫,美短类型和布偶类型都属于猫类型,所以它们都属于猫类型,它们都拥有“猫类型”的属性和行为能力

说说Java里有多少种设计模式?策略模式具体是怎么实现的?

答:Java经典设计模式共有23种,分为三大类:创建型模式(5种)、结构型模式(7种)和行为型模式(11种)

 

  • 创建型模式:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式

  • 结构型模式:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式

  • 行为型模式:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式

策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。具体做法是:先定义一个策略接口,接口里定义一些公共方法,在用具体的实现类去继承该策略接口,并重写这些公共方法。因为所有的策略用户是知道的,由用户去决定使用什么策略。

rpc协议是什么?rpc协议和http协议有什么区别?

答:RPC是一种远程过程调用的协议,使用这种协议向另一台计算机上的程序请求服务,不需要了解底层网络技术的协议。在 RPC 中,发出请求的程序是客户程序,而提供服务的程序是服务器。

  • RPC是一种API,HTTP是一种无状态的网络协议。RPC可以基于HTTP协议实现,也可以直接在TCP协议上实现。

  • RPC通信协议是长连接,HTTP协议一般采用短连接需要3次握手

  • RPC协议传递数据是加密压缩传输.HTTP协议需要传递大量的请求头信息

  • RPC协议一般都有注册中心.有丰富的监控机制

MySQL的优化方式有哪些?

答:

  • 最大连接数优化

  • 增加索引

  • SQL语句的优化

  • 读写分离、分库分表

RabbitMQ和RocketMQ有哪些区别?

答:

  • 实现方式不一样,RabbitMQ是基于AMQP 协议的,具有跨语言的特性,支持多种开发语言,基于erlang语言编写,天生具有高并发。RocketMQ是基于JMS的,是阿里巴巴旗下开发的mq,只能用java语言

  • 高可用不一样,RabbitMQ是主从架构,RocketMQ是分布式架构

  • RabbitMQ不支持事务性消息,RocketMQ支持

RocketMQ实现事务性消息的原理?

答:RocketMQ是基于两阶段提交来实现的事务,把这些事务消息暂存在一个特殊的queue中,待事务提交后再移动到业务队列中。

最后,给大家准备了一点小福利,有需要的可以关注领取喔!

扫描下方二维码关注公众号,回复:简历,即可免费领取相关简历模板。

                             

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java升级之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值