充电桩项目总结
介绍一下充电桩项目 我们这个充电桩项目是为新能源车车主提供充电服务的SaaS,我们充电的方式大致分为两种,用户手动扫码充电和即插即充模式,两种的区别就是用户需不需要进行扫码的步骤,手动扫码充电就需要用户在APP(或小程序)进行手动的操作充电流程,即插即充则只需要用户提前在我们的APP(或小程序)提前进行车的绑定,后续不需要再操作APP(或小程序),插枪就自动充电。 ps:小程序还是APP,看你自己怎么boxing的,推荐boxing小程序,微信小程序搜充电,可以搜到一大堆充电的小程序,建议自己最好使用一下,看一下你找的小程序,有没有即插即充的功能,如果没有,就建议只说扫码充电,把即插即充的方式作为项目可优化点提出,可以很加分。 什么是Saas SaaS(Software as a Service,软件即服务)是一种通过云端向用户提供软件功能的服务模式。用户无需自行部署服务器、安装软件或维护系统,只需通过浏览器或移动端即可访问服务端应用。SaaS 通常采用多租户架构,由平台统一管理数据、安全、版本升级与运维,企业按订阅方式使用系统功能。相比传统本地部署软件,SaaS 具有上线快、...
Java集合八股文
概念 数组和集合的区别 数组是固定长度的数据结构,一旦创建长度就无法改变,而集合是动态长度的数据结构,可以根据需要动态增加或减少元素。 数组可以包含基本数据类型和对象,而集合只能包含对象。 数组可以直接访问元素,而集合需要通过迭代器或其他方法访问元素。 说一说Java中的集合? 常见的List: ArrayList:是容量可变的非线程安全列表,它的底层使用数组实现。当几何扩容时,会创建更大的数组,将原数组复制到新数组。ArrayList支持对元素的快速随机访问,但是插入与删除速度很慢。 LinkedList:本质是一个双向链表,与ArrayList相比,其插入和删除速度更快,但随机访问速度更慢。 Set不允许存在重复元素,与List不同,Set中的元素是无序的,常见的Set: HashSet:通过HashMap实现,HashMap的Key即HashSet存储的元素,所有Key都是用相同的Value,一个Object类型常量。使用Key保证元素唯一性,但不保证有序性。由于HashSet是HashMap实现的,因此线程不安全。 LinkedHashSet:继承自Hash...
Redis八股文
Redis为什么这么快? 基于内存 io 多路复用:一个线程可以管理多个IO网络请求,内置多个API可以监听多个IO请求 单线程架构 为什么是单线程而不是多线程? Redis是内存数据库,性能瓶颈是在内存与网络IO延迟 用单线程极大减少了多线程的上下文切换和锁的竞争 持久化机制 数据结构优化 Redis穿透&击穿&雪崩 穿透 当客户端请求的 key 在 缓存里找不到,而且 数据库里也没有,就会导致每次请求都绕过 Redis 直击数据库 出现的场景: 恶意/异常请求:爬虫、攻击脚本随机构造ID = 99999,但是Redis缓存中没有,导致数据库被频繁打醒 用户传参异常:用户手滑将Id = -1传入,没有击中缓存和数据库 防护措施: 布隆过滤器把所有合法 ID 的集合(或 hash)先“塞”进布隆过滤器;当请求进来先问布隆:“这个 key 可能存在吗?” 优点:大幅削减不可能存在的请求 缺点:有极小误判率,需要定期同步全量数据 缓存空值/占位符 数据库里也没有?那就把 “没有” 这个事实也缓存起来 1234// 查库后发现nullred...
MySQL八股文
存储引擎及架构 数据库的三大范式 第一范式:字段必须是原子性,不能再分 第二范式:每个非主属性必须完全依赖于主键,消除部分依赖 第三范式:非主键之间不能有依赖关系,消除传递依赖 关系型数据库区别 关系型数据库:复杂的数据结构归结为简单二维表格形式 MySQL、Oracle 非关系型数据库:将数据存储为键值对集合,其中键作为唯一标识符 Redis、MongoDB SQL四大类语言 DDL:建库建表、改结构,典型语句:CREATE / ALTER / DROP / TRUNCATE DML:增删改数据行,典型语句:INSERT / UPDATE / DELETE DQL:查数据,典型语句:SELECT DCL:权限/账户控制,CREATE USER / DROP USER 内部架构及作用 连接器:不同语言与数据库进行交互,如java,php 系统管理和控制工具:涵盖:运维监控、数据维护、性能优化、安全管控四大核心场景 连接层 连接时会优先加载全局权限和数据库级权限 连接过程是一个TCP长连接,MySQL服务器和客户端通讯是“半双工”,只能单方面发送...
RocketMQ八股文
为什么要用MQ? 应用解耦 假设有支付、订单、短信三个服务,当有一笔订单需要调用这三个服务时,需要在代码中写死这三个服务的调用接口,如果需要新增一个新的服务积分服务,又要在代码中新增调用接口,耦合度太高,不利于管理 此时引入RocketMQ,通过发布不同的topic,需要的服务只需要订阅它就可以了,这样一来,生产者不需要知道我需要调用哪些接口,只管发送消息即可。未来再需要新增服务的时候,只需要在这个服务中订阅消息就可以了。扩展性提高,维护成本降低 生产者不再直接调用多个下游服务,只负责发消息; 谁想处理这条消息,就订阅对应的 Topic。 新增/删除下游服务不需要修改生产者代码。 异步提速 假设生产者向RocketMQ中发送一条用户下单的消息需要 50ms,生产者向数据库中发送一条消息需要 50ms,支付、订单、短信三个服务接收消息后处理需要 200ms 那么用户得到反馈的时间是多少呢? 50ms + 50ms = 100ms ,前端只需要将消息发送成功,数据库消息写入成功后就可以返回了,后端服务异步处理消息就行了,减少用户等待的时间 把耗时操作(发短信、扣库存、记...
SpringBoot八股文
SpringBoot八股文 SpringBoot的项目结构是怎么样的? 说一说Spring框架核心特性有哪些? / 好处有哪些? IOC容器:Spring通过控制反转(DI)实现了对象的创建和对象间的依赖关系,开发者只需要定义好Bean及其依赖关系,Spring容器就会负责创建和组装这些对象 AOP:面向切面编程,允许开发者横切关注点,例如事务管理、安全控制、日志记录等,可以提高代码的可维护度和可重用性 事务管理:Spring提供了一致的事务管理接口。开发者可以轻松地进行事务管理,而无需关心具体的事务API MVC框架:Spring MVC是一种Web框架,采用了模型-视图-控制器(MVC)框架,它支持灵活的URL到页面控制器的映射 非侵入式设计:它可以使应用程序对框架的依赖最小化 介绍一下IOC 简介:IOC即控制反转的意思,它是一种创建和获取对象的技术思想,依赖注入(DI)是实现这种技术的一种方式。在传统开发过程中,我们需要通过new关键字来创建对象。使用IOC思想开发方式的话,就可以不用new关键字来创建对象,而是通过IOC容器来帮我...
JVM八股文
JVM模型 JDK:Java Development Kit:Java开发工具包 JRE:Java Runtime Environment:Java运行环境 JVM:Java Virtual Machine Java虚拟机 为什么要引入JVM? JVM是Java虚拟机,支持跨平台运行,一次编译,处处运行,它能识别.class后缀文件,解析它的指令,完成想要的操作 内置GC回收垃圾,不需要手动管理内存 JVM运行时内存共分为 JVM 运行时内存主要分为 线程私有 和 线程共享 两类。 线程私有的包括: 程序计数器 Java 虚拟机栈 本地方法栈 线程共享的包括: 堆 方法区(JDK 8 以后是元空间,使用本地内存) 程序计数器 用于存储当前线程正在执行的java方法JVM指令地址;如果执行Native,计数器为null 程序计数器的作用,为什么是私有的? 程序计数器用于记录当前线程正在执行的字节码指令地址,在线程发生时间片切换时,JVM 可以根据程序计数器恢复执行位置。因为每个线程执行进度不同,所以程序计数器必须是线程私有的。 Java虚拟机栈 ...
JUC八股文
【要图】 线程 并发编程存在的三大问题? 原子性 同一时刻只能有一个线程对数据进行操作。在java中使用了atomic包和synchronized关键字来确保原子性 可见性 一个线程对主内存进行修改,其他线程可以看到。在java中使用synchronized和volatile两个关键字实现 有序性 一个线程观察其他线程的执行顺序,一般无序。在java中用happens-before原则来确保有序性 happens-before:如果 A happens-before B,那么 A 的结果(内存写入)对 B 可见,并且 A 的执行顺序在 B 之前(逻辑上有序)。 !!!只要不同时满足以上三个条件,就会产生并发问题 【区别!!!】 并发原子性:一段代码会不会被插队(线程层面) 三大范式中第一范式1NF 原子性:一个格子只能放一个值(表结构层面) 事务原子性:一组SQL要么全成要么全撤(事务层面) 线程和进程的区别? 进程是操作系统分配资源的最小单位,线程是 CPU 调度的最小单位。 一个进程内部可以包含多个线程,这些线程共享进程的内存资源。 在 Java 中,...
货柜项目总结
【打招呼】hr您好!我叫廖乾能,全日制统招本科,有2年的java开发工作经验,精通MySql的底层结构、存储引擎、事务隔离级别、锁、索引、MVCC工作原理,熟悉sql优化工作;熟练使用 SpringBoot、 SpringCloud 微服务开源框架, 熟悉 SpringAOP、 IOC 设计思想;深入理解垃圾回收算法及回收机制,有过实际调优经验;熟悉 Redis 持久化机制,过期策略以及集群部署,熟悉RocketMq事务消息底层原理,掌握消息丢失、消息重复、消息幂等问题的解决方案。期望能够有机会加入贵公司。 AW4WQ07A7BAPFN4J 【面试】面试官您好,我叫XXX,有个两年的java开发经验,掌握的技术栈有SpringBoot、SpringCloud;数据库的话MySQL,中间件Redis、MQ都有掌握;最近在做的项目是智能货柜,该项目主要部署在商圈、小区,用户通过扫码-开门-获取商品-关门的自助式购买,我在项目中主要负责设备服务,订单服务,其他的服务也有一定的了解,请问面试官您有什么想问的吗? 设备服务:存储设备的信息,设备通过MQ与其他服务进行通信 订单服务:扣款...
test
$jason = \frac{1}{2}$









