模拟面试后端开发复盘

news2024/11/16 8:31:20

目录

一:项目的系统开发和设计思路

二:Java的反射是什么?在项目中有用到吗?

三:多态的实现原理

四:项目中的redis是用在了哪里

五:Session和Cookie的区别,Cookie可以被修改吗?

六:常见的网络攻击有哪些

七:索引的类型和底层实现

八:项目中的日志记录用什么

 九:手撕代码题

三个线程交替打印ABC

力扣283.移动零 


一:项目的系统开发和设计思路

一般来说系统的开发和设计思路的话,就是一般现在的项目基本上都是前后端分离架构来实现的,所以在项目的设计时,要分层次结构来划定。
前后端分离架构中,前端一般是有专业的前端工程师来写的,因此我们步需要过分的关注前端,可以在github上找到相关的前端项目即可。

而我们是后端开发工程师,因此在后端上着重关注,例如单体项目的话,可以选择springboot技术来实现,在数据库方面可以选择mysql来实现,然后在该架构上先实现项目的基本运行骨架,之后在骨架上添砖加瓦,例如若访问量过大可以选择缓存,而缓存的实现可以选择redis,但也要注意使用redis会遇到的问题(缓存雪崩,缓存击穿,缓存穿透,数据的意一致性等),若是数据量过大可以选择分库分表等技术。

但项目是微服务项目的话,可以选择springcloud技术来实现,然后要加强springcloud各个组件的使用和注意事项等。因此在项目的系统开发和设计思路方面要记住一点就是技术是服务于业务的,因此要注重业务的实现再去选择技术方案。

二:Java的反射是什么?在项目中有用到吗?

Java的反射就是程序在运行期间可以动态的获取类的基本结构信息,方法,变量,字段值等并且可以动态的创建对象,调用方法和修改字段值等。
在Java中获取反射类一般有三种方法:

1.通过class.forName()方法
 Class UserClass = Class.forName("com.lcyy.interview.User");

2.通过类名.class方法
Class<User> userClass = User.class;

3.通过ClassLoder的.LoaderClass方法ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
Class<?> loadClass = systemClassLoader.loadClass("com.lcyy.interview.User");

在项目中没有显示的用到反射,但是侧面也用到了反射,例如,在项目的日志方面,使用的是springAOP来实现,AOP的底层实现是通过代理来实现,而代理有两种类型JDKproxy,CGLib代理,而JDKproxy的底层就是通过反射来实现的。还有在数据库层面的使用的mybatis底层也是通过反射来实现的。

三:多态的实现原理

多态是面向对象编程的一个重要的思想,指的是通过父类类型的引用变量来引用子类对象,并且在运行时根据对象的类型来确定调用哪个方法
而多态的底层实现主要是通过动态绑定+虚拟方法调用来实现

动态绑定:是指在编译时,编译器只知道变量的声明类型,而不知道实际的对象类型,在运行时JVM会动态绑定来解析具体的对象类型。

虚拟方法调用:所有的非私有的,非静态的,非final修饰的方法都是隐式的指定为虚拟方法,虚拟机会根据实际对象的类型来确定要调用哪个方法。
因此可以总结为:多态的实现原理就是依靠的动态绑定+虚拟方法调用来实现的,主要流程如下:创建父类的引用变量,并将其赋值给子类对象,在运行时动态绑定来确定引用变量所指向的实际对象类型,然后根据实际对象的类型调用相应的方法。

四:项目中的redis是用在了哪里

redis是一个很实用的非关系型数据库,redis的适用场景有很多:

可以用redis来存储Session,可以用redis来实现JWT的session自动续期

分布式缓存的实现也可以用redis,布隆过滤器也可以用redis来实现。
redis还可以实现消息队列,延迟队列,使用特有的数据结构来实现点赞榜的排名和排行榜

五:Session和Cookie的区别,Cookie可以被修改吗?

①Cookie可以存储在浏览器或者本地,Session只能存在服务器
②session 能够存储任意的 java 对象,cookie 只能存储 String 类型的对象
③Session比Cookie更具有安全性(Cookie有安全隐患,通过拦截或本地文件找得到你的cookie后可以进行攻击)
④Session占用服务器性能,Session过多,增加服务器压力
⑤单个Cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个Cookie,Session是没有大小限制和服务器的内存大小有关

六:常见的网络攻击有哪些

常见的网络攻击有HTTP协议下的中间人攻击和DDOS攻击

中间人攻击的完整流程:
A向B请求公钥,但是却被C截获。
C向B发送公钥请求。
B将公钥发给C。
C截获了B的公钥,然后替换成自己的公钥发给A。
A将C的公钥当成了B的公钥,并用其加密信息,发给B。
C截获了加密信息,用自己的私钥解密,获得明文。同时伪造新的信息,再用B的公钥加密,发给B。
B获得加密信息,用自己的私钥解密

DDOS攻击:

DDOS是从DOS的基础上发展而来的,有一台电脑对另一台电脑的攻击变成了多台电脑对一台电脑的攻击,Dos是一种拒绝服务(Denial of Service),DDos是一种分布式拒绝服务(Distributed Denial of Service)在互联网上DDOS攻击暴力而非常有效。表现为:你通过大量的数据包和目标服务器建立连接,占用目标服务器的带宽,导致目标服务器无法再去为正常的用户提供服务,表现为服务器炸了,如果是阿里云,当DDos攻击达到一定量,会触发阿里云服务器提供的“防御措施”,服务器直接被冻结

七:索引的类型和底层实现

索引的分类:可以从不同的类型来进行索引的分类,例如
按照字段类型分类:
主键索引:一张表只有一个主键索引,不能重复且不能为null

唯一索引:一张表可以有多个唯一索引,不能重复,但可以为null

普通索引:一张表可以有多个普通索引,包含了多个字段,可以重复,可以为null

全文索引:是一种可以通过关键字来查找的一种索引
 

按照物理存储结构来说,又可以分为
聚簇索引:一般来说是表中的主键索引,如果没有主键索引默认是表中第一个不能为null的唯一索引,如果还是没有则是InnoDB每行数据内置的6字节Rowid作为聚簇索引

非聚簇索引:二级索引,一个表中可以有多个非聚簇索引

按照数量来分类,又可以分为
单列索引:对表中单个列进行创建的索引,适用于对单个列进行频繁的查询,排序或者过滤才会用到

联合索引:对多个列进行创建的索引,可以对多个列的值进行排序,查询等

索引的底层实现

mysql中大部分的存储引引擎是通过B+树来实现的,B+数中非叶子节点存储的是主键id,叶子节点存储的是数据值,因此查询性能是比较高的

B+树的特性:
1.非叶子节点只存储键值和指向下一节点的指针

2.所有叶子节点都在同一个级别,并且包含所有的键值和对应的数据行指针或者行数据

3.所有叶子节点在同一层上,采用双向链表连接,方便范围查询

八:项目中的日志记录用什么

单体项目中的日志记录通常采用的式spring自带的一个slf4j+Logback来实现,通常是在需要的采集日志的地方加上lombok的注解(@Sl4j)来实现
微服务项目中可以使用Skywalking进行链路追踪来实现错误日志和异常日志的输出。

 九:手撕代码题

三个线程交替打印ABC

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

/**
 * 3 个线程交替打印 ABC
 */
public class ThreadLoopPrint {
    // 共享计数器
    private static int sharedCounter = 0;
    public static void main(String[] args) {
        // 打印的内容
        String printString = "ABC";
        // 定义循环栅栏
        CyclicBarrier cyclicBarrier = new CyclicBarrier(3, () -> {
        });
        // 执行任务
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < printString.length(); i++) {
                    synchronized (this) {
                        sharedCounter = sharedCounter > 2 ? 0 : sharedCounter; // 循环打印
                        System.out.println(printString.toCharArray()[sharedCounter++]);
                    }
                    try {
                        // 等待 3 个线程都打印一遍之后,继续走下一轮的打印
                        cyclicBarrier.await();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    } catch (BrokenBarrierException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        // 开启多个线程
        new Thread(runnable).start();
        new Thread(runnable).start();
        new Thread(runnable).start();
    }
}

力扣283.移动零 

class Solution {
    public void moveZeroes(int[] nums) {
         int left = 0,right = 0;
         while(right < nums.length){
            if(nums[right] != 0){
                int temp = nums[left];
                nums[left] = nums[right];
                nums[right] = temp;
                left++;
            }
            right++;
         }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2126787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

socket通讯原理及例程(详解)

里面有疑问或者不正确的地方可以给我留言。 对TCP/IP、UDP、Socket编程这些词你不会很陌生吧&#xff1f;随着网络技术的发展&#xff0c;这些词充斥着我们的耳朵。那么我想问&#xff1a; 什么是TCP/IP、UDP&#xff1f;Socket在哪里呢&#xff1f;Socket是什么呢&#xff1…

又一款强大好用的Shell脚本项目,支持Bash,Sh、Dash、Ksh等,甚至可以在编辑器中直接用,程序员必备!(附源码)

作为一个程序员&#xff0c;肯定经常都要和shell脚本打交道&#xff0c;Shell脚本可以帮我们自动化各种任务&#xff0c;但也经常有格式错误、拼写错误、逻辑错误等等麻烦&#xff0c;而且它不会告诉你错在哪里&#xff01; 今天就给大家分享一个超级实用的开源项目 - ShellCh…

【笔记】自动驾驶预测与决策规划_Part2_基于模型的预测方法

基于模型的预测方法 0. 前言1. 预测系统概述2. 定速度预测3.定曲率预测4. 短时预测与长时预测5. 基于手工特征的意图预测6: 基于模型的轨迹预测 0. 前言 本文主要记录课程《自动驾驶预测与决策技术》的学习过程&#xff0c;难免会有很多纰漏&#xff0c;感谢指正。 课程链接&am…

C++那些事之精选68道面试题

有小伙伴问我要一些C的学习题目/面试题目&#xff0c;我这里总结了一下分享给大家&#xff0c;大家可以自行去回答下面的问题&#xff0c;看看可以解答多少个。 注&#xff1a;懒人版附代码与答案会在文末星球详细讲解。 大纲 基础概念面向对象编程STL&#xff08;标准模板库&a…

如何加入PTP硬件时钟的组播组

首先要先判断当前机器是否能收到PTP时钟源发出的组播包 timeout 100 tcpdump -nni bond0 port 319 or port 320 -el -c 100抓包能抓到以下包信息&#xff0c;即能正常收到PTP时钟源发出的组播信息。其中的224.0.1.129即为组播地址 第一步正常了后&#xff0c;开始加入组播源 ip…

jmeter元件+取样器(十)

一、元件与组件 二、作用域 由于查看结果树与京东和百度是平级关系&#xff0c;所以均生效。 三、线程属性-取样器 1、请求方法&#xff08;在参数和消息体数据里填写请求数据&#xff0c;其结果可能会出现在URL或者请求体中&#xff0c;其请求头类型可能为表单或json格 &am…

解密Fiddler,从零开始轻松掌握弱网测试技巧!

使用Fiddler对手机App应用进行抓包&#xff0c;可以对App接口进行测试&#xff0c;也可以了解App传输中流量使用及请求响应情况&#xff0c;从而测试数据传输过程中流量使用的是否合理。这篇文章就带大家了解一下抓包过程。 01、Fiddler设置 1、启动Fiddler->Tools->Fid…

谷歌账号登录的时候需要手机验证,但是验证的手机号码已经注销了怎么办?

在服务的过程中&#xff0c;时不时会遇到有朋友问&#xff0c;自己的谷歌账号在登录的时候需要验证&#xff0c;这个账号绑定到的手机号已经注销了&#xff0c;怎么办&#xff1f;账号还能找回来吗&#xff1f; 今天GG账号服务就来为大家解答这个问题&#xff0c;让大家少走弯…

GEE Shapefile 格式转换 GeoJSON

在地理信息系统&#xff08;GIS&#xff09;领域&#xff0c;数据格式之间的转换是一项常见的需求。例如&#xff0c;将 Shapefile 格式转换为 GeoJSON 格式&#xff0c;对于上传数据到 Google Earth Engine (GEE) 尤其有用。本文将通过一个 Python 脚本的示例&#xff0c;实现…

软件无线电1-MATLAB实现FM调制解调

1、MATLAB读取语音文件 准备一段wav的语音文件&#xff0c;我用笔记本自带的录音机录制了一段自己的语音“爱福皮的姐.wav“&#xff0c;MATLAB读取语音文件&#xff0c;并获取采样率信息。 clc; clear all; %% ***************read file************************************…

【困难】 猿人学web第一届 第18题 jsvmp 洞察先机

文章目录 数据接口分析还原加密参数插桩调试分析日志插桩补充 python 代码 数据接口分析 数据接口 https://match.yuanrenxue.cn/match/18data 请求参数 {page: 页码, t: 时间戳, v: 加密值} 请求第一页不需要携带 t, v 参数 cookie 只需要携带 sessionid 只要 还原加密字段…

深入理解Java反射技术及其应用

什么是反射技术&#xff1f; Java反射机制是一种强大的特性&#xff0c;它允许程序在运行时动态加载类并获取类或对象的属性和方法。其核心在于JVM通过获得class对象进行反编译&#xff0c;从而获取对象的各种信息。 反射机制的基本特点 动态性 Java是一种先编译后运行的语言…

【电子通识】规格书上的%FS和%RD具体指什么?

在仪器仪表类的手册上&#xff0c;常见的精度表达规格显示方式&#xff1a;%FS 和%RD 究竟如何解读呢&#xff1f; 术语解说 %RD(Reading)&#xff1a;用于表示对比显示值(读值)存在多少(%)的误差 %FS(Full Scale)&#xff1a;用于表示对比全量程存在多少(%)的误差 %SP(Set Poi…

基于vue框架的城市体育运动交流平台15s43(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,赛事类型,近期赛事,比赛报名,器材类型,器材信息,自由约战,运动队伍 开题报告内容 基于Vue框架的城市体育运动交流平台开题报告 一、项目背景与意义 随着城市化进程的加速和居民健康意识的提升&#xff0c;城市体育运动已成为现代…

思维导图神器!四款高效工具助你职场逆袭

在如今这个信息爆炸的时代&#xff0c;如何高效地整理和呈现思维&#xff0c;成为了一个重要的能力&#xff1b;思维导图作为一种有效的思维工具&#xff0c;被广泛应用于工作、学习和生活中&#xff1b;今天&#xff0c;我将为大家介绍四款常用的思维导图软件并分享一下它们的…

win10任务栏透明如何调整?——详解Windows任务栏设置与优化技巧

在这个数字化时代&#xff0c;电脑已经成为我们日常办公和生活中的。关于win10任务栏透明的设置方法&#xff0c;身边很多同事都在咨询。 本文就来简单介绍下关于电脑任务栏个性化设置的方法&#xff0c;毕竟任务栏影响着用户体验。这时&#xff0c;一款优秀的任务栏优化工具就…

模拟实现string类: clear函数、流提取(<<)和流插入(>>)运算符重载、>、<、==、<=、>=、!=的运算符重载、赋值运算符(=)重载等的介绍

文章目录 前言一、 clear函数二、流提取(<<)和流插入(>>)运算符重载三、 >、<、、<、>、!的运算符重载四、赋值运算符&#xff08;&#xff09;重载总结 前言 模拟实现string类: clear函数、流提取(<<)和流插入(>>)运算符重载、>、<…

[论文笔记]ChatQA: Surpassing GPT-4 on Conversational QA and RAG

引言 今天来看一下上篇论文笔记中反复介绍的 ChatQA: Surpassing GPT-4 on Conversational QA and RAG。 为了简单&#xff0c;下文中以翻译的口吻记录&#xff0c;比如替换"作者"为"我们"。 我们介绍了 ChatQA&#xff0c;这是一个模型套件&#xff0c;一…

机器学习和深度学习的常见概念总结(面试用,多原创图和公式)

目录 使用说明一、未分类损失函数&#xff08;Loss Function&#xff09;1. **损失函数的作用**2. **常见的损失函数**2.1. **均方误差&#xff08;MSE, Mean Squared Error&#xff09;**2.2. **均方根误差&#xff08;RMSE, Root Mean Squared Error&#xff09;**2.3. **平均…

1. 运动控制指令概要(omron 机器自动化控制器)

机器自动化控制器——第一章 运动控制指令概要 1-1 运动控制指令PLCopen运动控制用功能块运动控制指令概要▶ 运动控制指令的种类▶ 状态变化▶ 运动控制指令的启动和状态▶ 异常处理▶ 执行运动控制指令时输入变量的变更(指令重启)▶ 通过选择缓存模式执行指令多重启动▶ 通过…