面经:一面朗坤智慧

面试流程:
1.hr首先让我做了一个简单的自我介绍
我介绍了我叫什么,我的家乡,来自哪里,当前是什么状态,我的教育背景,还有我自己的学习状况,项目情况,实习经验,导师项目,我自己做过的项目,用到的语言和技术,我的兴趣爱好和特长;
2.hr介绍了自己;
3.接着hr询问了我Redis是一种怎样的数据库,用来干什么的,一般需要缓存什么数据,不缓存哪些,在项目中有没有用到?
Redis是一个开源(BSD许可的内存数据结构存储),用作数据库、缓存、消息代理和流媒体引擎。Redis提供字符串散列列表集合带有范围查询的排序集位图超日志地理空间索引数据结构。Redis内置复制Lua脚本LRU驱逐事务和不同级别的磁盘持久性,并通过Redis SentinelRedis Cluster的自动分区提供高可用性

1) 作为分布式系统的缓存服务器
客户端访问服务器的时候,会先检查redis是否有数据,redis有数据直接反馈给客户端,不再访问mysql.redisr如果没有再请求数据库,数据库同时会进行缓存重建到redis,下次就可以直接读redis.

2) 应对数据高速读写的业务
高速读写,在互联网的项目中都是一个读多写少的.就比如说双十一淘宝,大量的客户访问,如果直接去读取数据库的话,对mysql无疑就是一个很大的压力,redis可以减轻mysql压力.缓存到redis服务器,后期再写入到数据库.但是这样会有一个问题,我们不只需要更新mysql,也要更新redis.就是我们往往买东西的时候,会看到库存还有1,但是就是不能下单,这并不是有货不给卖,实际库存就是空的.只是redis还没把数据同步到mysql.数据没有绝对的一致性

3) 作为分布式锁使用(Zookeeper、Redis)
分布式锁的使用的话,早期做过一个项目,当时为了确保线程安全的话,用到了synchronized关键字确保线程安全,后期就是项目需要升级迭代,服务部署到不同的服务器中,集群.那么就可以用到redis的分布式锁.统一锁在redis中.

4) 数据共享
数据共享就是之前做过一个项目,当时是用到了oauth2的jwt直接存储用户信息生成到令牌中,直接放入客户端的,每次带着令牌访问资源服务.那么还有另外一种方式就是把生成的令牌存储在redis中,每次访问资源服务器的时候就直接从redis中获取,可以实现资源的共享.

5) ID自增序列

4.反射是什么?
Java-Reflection(JAVA反射)是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够通过Java-Reflection来调用它的任意方法和属性(不管是公共的还是私有的)。
这种动态获取信息以及动态调用对象方法的行为被称为java的反射机制。

Java反射机制主要提供了以下功能:

1.在运行时判断任意一个对象所属的类。

2.在运行时构造任意一个类的对象。

3.在运行时判断任意一个类所具有的成员变量和方法。

4.在运行时调用任意一个对象的方法。

5.单例模式是什么?
什么是java单例模式?

单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。

单例模式的优点:

(1)首先肯定是节省内存资源,不管多频繁的通过暴露的方法创建实例,都能保证创建的对象在系统内存中是同一实例对象;

(2)灵活性,由于所有实例的创建都由该类控制,所有该类可以灵活的更改实例化过程;

(3)实例的受控访问,单例类可以轻松的控制唯一实例的受控访问;

单例模式的缺点:

(1)单例模式没有接口,不容易扩展;

(2)使用时不能用反射模式创建单例,否则会实例化一个新的对象;

(3)使用懒单例模式时注意线程安全问题;

实现单例模式的方式:

饿单例方式

饿单例在类加载的时候就被提前new了出来,一开始就实例化了一个supermanInstance对象,不管你程序需要不要调用这个对象,它都已经准备好了;没有进行延迟加载,为了减小程序负载大多数情况下需要懒加载,所以这种实现单例的方式不是最佳选择。

懒单例方式(单线程写法)

声明一个对象不去实例化它,当程序需要实例化的时候调用静态工厂方法 getSupermanInstance(),方法中对声明的对象进行判断,如果是null的话再去实例化它,这种写法可以达到延迟加载的效果,但它是非线程安全的,若在多线程中有两个线程同时调用静态工厂方法getSupermanInstance() 就有可能重复的创建该类的实例破坏了单例的唯一性。

6.Java有几种设计模式?
1)抽象工厂模式是提供一个接口,用于创建相关或者依赖对象的家族,而不需要明确指定具体类。

2)建造模式是将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。

3)工厂方法模式定义一个创建对象的接口,让子类决定实例化那个类。

4)原型模式是用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。

5)单例模式,它的定义就是确保某一个类只有一个实例,并且提供一个全局访问点。

6)外观模式提供了一个统一的接口,用来访问子系统中的一群接口。

7)适配器模式是将一个类的接口,转换成客户期望的另一个接口。

8)桥接模式是讲抽象部分和实现部分隔离开来,使得他们能够独立变化。

9)组合模式组合多个对象形成树形结构以表示“整体-部分”的结构层次。

10)装饰模式:动态的给对象添加新的功能。

11)享元模式就是运行共享技术有效地支持大量细粒度对象的复用。

12)代理模式就是给一个对象提供一个代理,并由代理对象控制对原对象的引用。

13)命令模式将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。

14)解释器模式就是定义语言的文法,并且建立一个解释器来解释该语言中的句子。

15)访问者模式即在不改变数据结构的前提下,增加作用于一组对象元素的新功能。

16)迭代子模式是提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露其内部的表示。

17)中介者模式就是用一个中介对象来封装一系列的对象交互。

18)备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态。

19)观察者模式定义了对象之间的一对多依赖关系。

20)状态模式就是允许对象在内部状态发生改变时改变它的行为。

21)策略模式就是定义了算法族,分别封装起来,让他们之前可以互相转换。

22)模板方法模式就是在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。

23)责任链模式是将请求的发送者和接收者解耦,使的多个对象都有处理这个请求的机会。







#学生时代让我难忘的事#
全部评论
hi~同学,秋招遇“寒气”,牛客送温暖啦!23届秋招笔面经有奖征集中,参与就得牛客会员7天免费体验,最高赢300元京东卡!戳我去看>>>https://www.nowcoder.com/link/zhengjipinglun
点赞 回复 分享
发布于 2022-09-19 15:45 北京
发意向了么
点赞 回复 分享
发布于 2022-09-20 20:28 江苏
昨天刚一面结束 不知道什么时候有结果
点赞 回复 分享
发布于 2022-09-21 16:09 江苏
我上周一面结束,现在还没结果应该是凉了
点赞 回复 分享
发布于 2022-09-28 08:49 湖北
你这能回答这么长的么
点赞 回复 分享
发布于 2022-09-29 17:00 江苏

相关推荐

招商银行 fintech实验室 月薪N-20k
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 14:27
投票
禾迈电力 测试工程师 10k*15 本科其他
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
2
8
分享
牛客网
牛客企业服务