栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【面试经验总结】从基础到微服务

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【面试经验总结】从基础到微服务

文章目录

八大基本类型开发过程中用到的集合多态的优点内层控制外层循环equals和hashcode成员变量,局部变量ArrayList底层存取值怎么实现的,是不是线程安全的,扩容是怎么实现的HashMap的底层原理,ConcurrentHashMap的实现原理,存取值的时候是怎么实现的。进程重载和重写的区别Java创建对象的方式Object的默认方法包装类的Cache多态中静态方法的执行反转字符串程序Java异常处理机制![请添加图片描述](https://img-blog.csdnimg.cn/f23131a0e0d2485bbe3cb989c1c6f0d4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5piO5pyI5Li65Y2_,size_20,color_FFFFFF,t_70,g_se,x_16)常用的IO类代码规范的理解项目中用到final的地方深拷贝和浅拷贝的区别`对集合有二次加工的处理吗`线程池的创建多线程的使用场景双亲委派JVM结构,运行顺序类加载知识点HashMap的遍历方式HashSet怎么保证元素唯一lock锁锁升级sync的实现原理sync和volatile怎么理解资源独立分配线程的状态的转换关系,主动阻塞和被动阻塞BIN和NIO的区别,怎么实现多路复用HTTPS怎么实现的网络安全性设计模式是用来干嘛的,为什么看设计模式Map自定义一个实例作为Map的Key,需要满足什么条件。自定义类作为Key,有什么要求。List用什么方式遍历Remove删除元素做过什么其他操作进程和线程在地址空间上有什么区别进程是分配资源的基本单位,怎么理解线程和资源有什么关系gitee代码冲突怎么解决 `二`

Gitee常用命令有哪些工作中用到哪些数据库事务是在哪里应用的数据库中sql优化索引的数据结构事务的隔离级别事务的传播方式分页是怎么做的#和$的区别,分别什么情况下使用Mysql数据库悲观锁和乐观锁SQL:删除重复的记录怎么创建索引Get和Post的区别Get传参的长度限制HTTP状态码POST上传有限制,上传文件过大怎么办。union和union all的区别mysql 中float和double的区别联合索引中,最左的字段放在右边会命中吗?为什么?mysql中的几个器 `三`

过滤器拦截器前端传参时,是怎么和对象映射的。IOC和AOPAOP是怎么调用的,静态代理和动态代理的区别Mybatis的优缺点Mybatis的BIO接口支持重载吗SpringMVC的请求原理SoringMVC组件SpringBoot读取配置文件的配置项,怎么读取。如果读取不到怎么办,除了@Value还有什么。SpringBoot中的异常拦截怎么做的SpringBoot依赖是怎么导入的SpringBoot是怎么读取参数的SpringBoot常用注解SpringBoot的核心配置文件,什么格式,什么区别SpringBoot读取配置文件中的类,接口Spring中的路由,怎么凭借路径前后的无意义参数Bean生命周期Bean的作用域读取XML的几种方式如何解决循环依赖Spring的食物介绍一下SpringBoot单例有线程安全问题吗?原型呢?HandlerMapping是什么时候工作的,程序启动的时候还是第一次请求的时候Spring中的local有没有用过Nginx有什么作用,怎么应用的有没有参与过项目部署,怎么实现的异常处理SoringBoot是怎么运行的Mybatis常用标签Mybatis分页实现SpringMVC的注解SpringBoot如何解决跨域问题Spring容器的启动问题BeanFactroy怎么理解反向代理的过程负载均衡怎么理解 `四`

流控模式有哪些?项目中有没有用分布式架构项目中有缓存吗,存在哪里的?redis数据类型redis中存储了哪些数据redis常见命令redis设置密码怎么登录redis常用数据类型,有什么特点redis的持久化机制缓存崩坏三问,怎么解决认证和权限是怎么实现的MQ的用途 `五`

SpringCloud了解的多不多,尝试搭建微服务项目吗?SpringCloud的组件怎么实现分布式锁Redis的分布式锁是怎么实现的项目中涉及到高并发的问题了吗Linux的权限RPC什么原理,怎么调用远端服务像本地服务 `其他`

项目模块描述项目使用了哪些技术项目的日志怎么用一个11L,7L的杯子,量出2L水4L水,用1.5L的瓶子和2.5L的瓶子,怎么平均分项目中遇到报错如何定位解决理解老代码会遇见什么问题更改代码影响别人的模块,怎么解决项目里解决过什么有意义的东西出现过哪些异常,什么原因造成的测试时数据量小,发布后数据量大,怎么确保跑的起来改老代码看不懂代码怎么解决服务按领域拆分,按功能拆分,不同模块怎么办改动影响了其他模块,导致出现问题,解决思路是怎么样的。项目的表结构介绍一下近期的项目,技术关键点,有挑战的地方。项目中常用的数据结构,什么场景下使用交互岗位沟通流程
### 一

八大基本类型

占用:1248 48 21
取值范围:占用空间x8-1次方,char是0-65535

开发过程中用到的集合

linkedHashMap——LRU算法——缓存
HashMap,List——利用key不可重复和键值对特性,对多级目录进行分级封装
ConcurrentHashMap——线程安全
ArrayList——实体类封装的时候

多态的优点

1.忽略某个对象的类型,就可以调用某些方法——简化性
2.提高了程序的可拓展性和可维护性——可替换性
3.统一调用标准,多态又可以叫做动态绑定,实现类型的解耦。——接口性

内层控制外层循环
		a:for (int i = 0; i < 5; i++) {
            b:for (int j = 0; j < 5; j++) {
              break a;
            }
        }
equals和hashcode
@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        RewriteEqHashCode that = (RewriteEqHashCode) o;
        return Objects.equals(id, that.id) &&
                Objects.equals(name, that.name);
    }
 
    @Override
    public int hashCode() {
        return Objects.hash(id, name);

成员变量,局部变量

代码位置不同,生命周期不同,初始化不同,内存不同。

ArrayList底层存取值怎么实现的,是不是线程安全的,扩容是怎么实现的

扩容:
1.5倍扩容,CopyOf()。
如果扩容一半不够,就将目标size作为扩容后的容量。
采用的是浅拷贝:只拷贝引用。

存值:
首先判断容量够不够,然后通过size自增作为下标,通过数组的方式放进去。如果不够,会层层调用grow方法进行扩容。如果调用的是addall方法,则会把添加的集合转为数组并拿到length,进行容量判断,如果不够,则扩容。并且对比扩容的size和新的size比较,以大的为准。
如果指定下标add,会判断下标是否合法,然后判断容量,并通过arraycopy方法,将后半段元素后移1。
取值:
如果输入下标取值,则会检查下标是否合法,如果OK,则通过数组的方式取值。并通过arrycopy进行迁移元素,并把最后一个空位设为null。
如果传入一个value,则会判断非空后进行遍历,并取出。

HashMap的底层原理,ConcurrentHashMap的实现原理,存取值的时候是怎么实现的。

1、map.put(k,v)实现原理
(1)首先将k,v封装到Node对象当中(节点)。
(2)然后它的底层会调用K的hashCode()方法得出hash值。
(3)通过哈希表函数/哈希算法,将hash值转换成数组的下标,下标位置上如果没有任何元素,就把Node添加到这个位置上。如果说下标对应的位置上有链表。此时,就会拿着k和链表上每个节点的k进行equal。如果所有的equals方法返回都是false,那么这个新的节点将被添加到链表的末尾。如其中有一个equals返回了true,那么这个节点的value将会被覆盖。
2、map.get(k)实现原理
(1)先调用k的hashCode()方法得出哈希值,并通过哈希算法转换成数组的下标。
(2)通过上一步哈希算法转换成数组的下标之后,在通过数组下标快速定位到某个位置上。如果这个位置上什么都没有,则返回null。如果这个位置上有单向链表,那么它就会拿着K和单向链表上的每一个节点的K进行equals,如果所有equals方法都返回false,则get方法返回null。如果其中一个节点的K和参数K进行equals返回true,那么此时该节点的value就是我们要找的value了,get方法最终返回这个要找的value。

进程

正在运行的程序,占用内存区域,CPU进行运行和计算。
特点:
独立性——没有允许的情况下不可以相互访问
动态性
并发性——不会相互影响

重载和重写的区别 Java创建对象的方式

使用构造方法:new,反射
不使用构造方法:反序列化 (深拷贝),clone(浅拷贝–深拷贝序列化,深拷贝变量也clone)

Object的默认方法

1个本地注册方法
1个getClass()
4个,hash,toString,Equals,clone
2个notify
3个wait
1个finalize()

包装类的Cache

多态中静态方法的执行

静态方法不同于静态代码块,是由开发者调用。
只能通过类名点处理。子类可以继承父类的静态方法。
如果同名,不算重写,子类只能调用到子类的方法。

反转字符串程序

0.reverse
1.倒序拼接
2.切割递归
3.二分递归

Java异常处理机制 常用的IO类 代码规范的理解

命名规范,
注释规范,
代码结构化,模块化
开发文档的习惯

项目中用到final的地方

静态常量
参数:基本类型为常量,引用类型不能被重新赋值

深拷贝和浅拷贝的区别

浅拷贝:只拷贝一层。
深拷贝:新开辟堆内存中的数据。

对集合有二次加工的处理吗

有,在自己写的本地缓存中。重写了linkedHashMap的removeEldestEntry()方法,把删除的元素返回给成员变量,让基础Map能删除已经不存在的key。

@ToString
public class LRUBirdCacheImpl implements BirdCache {
    private BirdCache birdCache;
    private Map linkedHashMap;
    private int maxKey;
    private Object eldestKey;
    public LRUBirdCacheImpl(BirdCache birdCache, int maxKey) {
        this.birdCache = birdCache;
        this.maxKey = maxKey;
        this.linkedHashMap =
                new linkedHashMap( maxKey,0.75F,true){
                    //此方法每次执行keyMap的put操作时调用
                    @Override
                    protected boolean removeEldestEntry(Map.Entry eldest) {
                        boolean flag=size()>maxKey;
                        if(flag)eldestKey=eldest.getKey();
                        return false;
                    }
                };
    }
    
    @Override
    public void saveBird(Object key, Object value) {
        Object put = linkedHashMap.put(key, key);
        if(eldestKey!=null){
            birdCache.removeBird(eldestKey);
        }
        birdCache.saveBird(key,value);
    
    }
    
    @Override
    public Object getBird(Object key) {
        linkedHashMap.get(key);
        Object o = linkedHashMap.get(key);
        return o;
    }
    
    @Override
    public Object removeBird(Object key) {
        return birdCache.removeBird(key);
    }
    
    @Override
    public void clear() {
        birdCache.clear();
        linkedHashMap.clear();
    }
    
    @Override
    public int size() {
        return birdCache.size();
    }
}
线程池的创建

自定义创建:
ThreadPoolExecutor
ScheduledThreadPoolExecutor
ForkJoinPool
Executors工具类创建:

多线程的使用场景 双亲委派 JVM结构,运行顺序 类加载知识点 HashMap的遍历方式 HashSet怎么保证元素唯一 lock锁 锁升级 sync的实现原理 sync和volatile 怎么理解资源独立分配 线程的状态的转换关系,主动阻塞和被动阻塞

等待阻塞,同步阻塞,其他阻塞。
join():并行变串行
interrupt():更改标识,抛异常,中断阻塞。

BIN和NIO的区别,怎么实现多路复用 HTTPS怎么实现的网络安全性 设计模式是用来干嘛的,为什么看设计模式 Map自定义一个实例作为Map的Key,需要满足什么条件。自定义类作为Key,有什么要求。

1:注意判断对象的规则是什么。

List用什么方式遍历 Remove删除元素做过什么其他操作 进程和线程在地址空间上有什么区别 进程是分配资源的基本单位,怎么理解 线程和资源有什么关系 gitee代码冲突怎么解决 二 Gitee常用命令有哪些 工作中用到哪些数据库 事务是在哪里应用的 数据库中sql优化 索引的数据结构 事务的隔离级别 事务的传播方式 分页是怎么做的 #和$的区别,分别什么情况下使用 Mysql数据库悲观锁和乐观锁 SQL:删除重复的记录 怎么创建索引 Get和Post的区别 Get传参的长度限制 HTTP状态码 POST上传有限制,上传文件过大怎么办。 union和union all的区别 mysql 中float和double的区别 联合索引中,最左的字段放在右边会命中吗?为什么? mysql中的几个器 三 过滤器拦截器 前端传参时,是怎么和对象映射的。 IOC和AOP AOP是怎么调用的,静态代理和动态代理的区别 Mybatis的优缺点 Mybatis的BIO接口支持重载吗 SpringMVC的请求原理 SoringMVC组件 SpringBoot读取配置文件的配置项,怎么读取。如果读取不到怎么办,除了@Value还有什么。 SpringBoot中的异常拦截怎么做的 SpringBoot依赖是怎么导入的 SpringBoot是怎么读取参数的 SpringBoot常用注解 SpringBoot的核心配置文件,什么格式,什么区别 SpringBoot读取配置文件中的类,接口 Spring中的路由,怎么凭借路径前后的无意义参数 Bean生命周期 Bean的作用域 读取XML的几种方式 如何解决循环依赖 Spring的食物 介绍一下SpringBoot 单例有线程安全问题吗?原型呢? HandlerMapping是什么时候工作的,程序启动的时候还是第一次请求的时候 Spring中的local有没有用过 Nginx有什么作用,怎么应用的 有没有参与过项目部署,怎么实现的 异常处理 SoringBoot是怎么运行的 Mybatis常用标签 Mybatis分页实现 SpringMVC的注解 SpringBoot如何解决跨域问题 Spring容器的启动问题 BeanFactroy怎么理解 反向代理的过程 负载均衡怎么理解 四 流控模式有哪些? 项目中有没有用分布式架构 项目中有缓存吗,存在哪里的? redis数据类型 redis中存储了哪些数据 redis常见命令 redis设置密码怎么登录 redis常用数据类型,有什么特点 redis的持久化机制 缓存崩坏三问,怎么解决 认证和权限是怎么实现的 MQ的用途 五 SpringCloud了解的多不多,尝试搭建微服务项目吗? SpringCloud的组件 怎么实现分布式锁 Redis的分布式锁是怎么实现的 项目中涉及到高并发的问题了吗 Linux的权限 RPC什么原理,怎么调用远端服务像本地服务 其他 项目模块描述 项目使用了哪些技术 项目的日志 怎么用一个11L,7L的杯子,量出2L水 4L水,用1.5L的瓶子和2.5L的瓶子,怎么平均分 项目中遇到报错如何定位解决 理解老代码会遇见什么问题 更改代码影响别人的模块,怎么解决 项目里解决过什么有意义的东西 出现过哪些异常,什么原因造成的 测试时数据量小,发布后数据量大,怎么确保跑的起来 改老代码看不懂代码怎么解决 服务按领域拆分,按功能拆分,不同模块怎么办 改动影响了其他模块,导致出现问题,解决思路是怎么样的。 项目的表结构 介绍一下近期的项目,技术关键点,有挑战的地方。 项目中常用的数据结构,什么场景下使用 交互岗位沟通流程
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/711448.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号