中厂,面试就问了4道题,凉了!
你好,我是田哥
所谓的金三银四,已变成铜三铁四了。很多人基本上莫有面试机会,更可惜的是机会有了,却没有把握住。
加入我知识星球:免费做简历优化、简历包装、模拟面试...
今天早上,一个朋友和我说面试中被问了下面四道题目,最后一道是真的搞不定。
条件:五年工作,普通本科,基本在外包
面一家中厂,期望薪资24K
面试结果:就问了四个题,前面三个题回答的马马虎虎,最后一道完全不知如何下手,凉了!
1:MySQL性能优化方法有哪些?
MySQL性能优化方法包括以下几个方面:
1. 优化SQL语句:
SQL语句是MySQL性能优化的重要方面。优化SQL语句可以提高查询效率和减少资源消耗。有以下几个方法:避免使用SELECT *,避免使用子查询,使用索引,使用JOIN代替子查询等。
2. 配置MySQL服务器参数:
MySQL服务器参数的设置直接影响MySQL的性能,包括缓存大小、连接数、线程池大小等。根据实际应用场景,合理配置MySQL服务器参数可以提高MySQL的性能。
3. 数据库表结构优化:
数据库表结构设计的好坏直接影响MySQL的性能。应该尽量避免使用大量的NULL值、重复的列、过多的索引等。
4. 数据库表分区:
将大的数据库表分区可以提高MySQL的性能。分区可以减少数据检索时的扫描范围,从而提高查询效率。
5. 使用缓存技术:
使用缓存技术可以减少数据库访问次数,提高MySQL的性能。常见的缓存技术包括Memcached和Redis。
6. 数据库读写分离:
将读写操作分离可以提高MySQL的性能。读操作可以分配到从服务器,写操作可以分配到主服务器。这样可以提高MySQL的并发性能。
7. 使用分布式数据库:
使用分布式数据库可以提高MySQL的性能。分布式数据库将数据分配到多个节点,可以提高MySQL的并发性能和可扩展性。
总之,对于MySQL的优化来说,需要根据具体情况进行优化,从SQL语句优化、服务器参数配置、数据库表结构优化等多个方面入手,才能提高MySQL的性能。
2:分布式事务实现方案有哪些?
常见的分布式事务实现方案有以下几种:
1. 两阶段提交(Two-Phase Commit,2PC)
两阶段提交是最常用的分布式事务实现方案之一,主要思想是将事务分为两个阶段,第一阶段是准备阶段,第二阶段是提交阶段。在准备阶段,所有参与者向协调者发送事务准备请求,协调者收到请求后向所有参与者发送准备请求,如果所有参与者都准备就绪,则进入提交阶段,否则回滚事务。
优点:实现简单,可靠性高。
缺点:存在单点故障,性能较差,容易出现阻塞。
2. 三阶段提交(Three-Phase Commit,3PC)
三阶段提交是对两阶段提交的改进,主要思想是在两阶段提交的基础上增加一个超时机制。在准备阶段,如果协调者接收到参与者的准备请求后一段时间内没有收到提交请求,则会向参与者发送中止请求,参与者接收到中止请求后回滚事务。
优点:解决了两阶段提交的阻塞问题,容错性更好。
缺点:实现复杂,性能较差。
3. 补偿事务(Compensating Transaction)
补偿事务是一种基于业务逻辑的分布式事务实现方案,主要思想是在每个参与者上定义一个补偿事务,当事务出现异常时,执行相应的补偿事务以保证数据的一致性。
优点:实现简单,可靠性高。
缺点:需要对业务逻辑进行深入分析,复杂度较高。
4. 基于消息的最终一致性(Message-Based Eventual Consistency)
基于消息的最终一致性是一种异步的分布式事务实现方案,主要思想是在每个参与者上定义一个消息队列,将事务操作转化为消息发送到队列中,通过消息的异步通信实现最终一致性。
优点:实现简单,性能高。
缺点:对消息队列的可靠性和性能要求较高。
5. Paxos算法
Paxos算法是一种基于消息传递的一致性算法,用于解决分布式系统中的一致性问题。Paxos算法可以用来实现分布式事务,其主要思想是通过选举一个领导者来协调事务的执行。
优点:实现简单,容错性高。
缺点:性能较差,需要多次消息传递。
3:JVM性能调优手段有哪些?
1. 内存调优:
JVM的内存管理是非常重要的一方面,可以通过调整JVM的内存参数来优化JVM的性能,如-Xms(初始堆大小)、-Xmx(最大堆大小)、-Xmn(年轻代大小)、-XX:PermSize(永久代大小)等。
2. 垃圾回收调优:
JVM的垃圾回收机制是JVM性能调优的一个重要方面。可以通过调整垃圾回收器的类型、参数以及对不同的对象采用不同的垃圾回收策略等方式来优化JVM的垃圾回收性能。
3. 线程调优:
线程是JVM的重要组成部分,可以通过调整线程的数量、优先级、调度策略等方式来优化JVM的性能。
4. 类加载调优:
类加载是JVM的一个重要部分,可以通过调整类加载器的缓存策略、使用预编译技术、优化类的加载顺序等方式来优化JVM的性能。
5. JIT调优:
JIT(即时编译器)是JVM的重要组成部分,可以通过调整JIT的优化级别、选择适合的编译器等方式来优化JVM的性能。
6. I/O调优:
I/O操作是JVM常用的操作之一,可以通过调整I/O缓存、选择合适的I/O方式等方式来优化JVM的性能。
7. 数据库连接池调优:
JVM通常会涉及到数据库连接,可以通过调整数据库连接池的大小、连接超时等方式来优化JVM的性能。
8. 网络调优:
JVM在网络通信方面也非常重要,可以通过调整网络缓存、调整网络传输方式等方式来优化JVM的性能。
4:什么是LRU算法?用java写一个LRU算法
RU算法是一种缓存淘汰策略,Least Recently Used的缩写,即最近最少使用。
实现思路:
创建一个双向链表,用于存储数据。
创建一个hashmap,用于存储数据的key和对应的节点。
当数据被访问时,如果在hashmap中存在对应的节点,则将该节点移动到链表头部。
当链表满时,删除链表尾部的节点。
Java代码实现:
/*** @author tianwc 公众号:java后端技术全栈、面试专栏* @version 1.0.0* @date 2023年04月23日 14:14* 博客地址:<a href="http://woaijava.cc/">博客地址</a>**/
public class LRUCache<K, V> {private int capacity; // 缓存容量private Map<K, Node<K, V>> map; // 缓存存储结构private Node<K, V> head; // 链表头部private Node<K, V> tail; // 链表尾部public LRUCache(int capacity) {this.capacity = capacity;map = new HashMap<>(capacity);head = new Node<>(null, null);tail = new Node<>(null, null);head.next = tail;tail.prev = head;}public V get(K key) {Node<K, V> node = map.get(key);if (node == null) {return null;}// 将访问的节点移动到链表头部remove(node);addFirst(node);return node.value;}public void put(K key, V value) {Node<K, V> node = map.get(key);if (node != null) {// 更新节点值,并移动到链表头部node.value = value;remove(node);addFirst(node);} else {node = new Node<>(key, value);map.put(key, node);// 添加到链表头部addFirst(node);// 如果容量已满,删除链表尾部节点if (map.size() > capacity) {map.remove(tail.prev.key);remove(tail.prev);}}}private void addFirst(Node<K, V> node) {node.next = head.next;node.prev = head;head.next.prev = node;head.next = node;}private void remove(Node<K, V> node) {node.prev.next = node.next;node.next.prev = node.prev;}private static class Node<K, V> {K key;V value;Node<K, V> prev;Node<K, V> next;Node(K key, V value) {this.key = key;this.value = value;}}
}
使用示例:
LRUCache<Integer, String> cache = new LRUCache<>(3);
cache.put(1, "one");
cache.put(2, "two");
cache.put(3, "three");
cache.put(4, "four");
System.out.println(cache.get(1)); // 输出null
System.out.println(cache.get(2)); // 输出"two"
cache.put(5, "five");
System.out.println(cache.get(3)); // 输出null
System.out.println(cache.get(4)); // 输出null
System.out.println(cache.get(5)); // 输出"five"
输出结果:
null
two
null
null
five
每个面试官都有自己的面试套路,有的人一上来从基础开始,有的人却是从项目开始,还有的人是从你自我介绍内容开始,....
文中的这位朋友是从自我介绍中开始的,因为自我介绍中提到自己有性能调优经验,于是面试官一开始就问性能优化方面,看到她这些题的回答的不怎么样,于是也猜到就是为了吹牛逼而搞上去的“性能调优经验”。
再次,提醒大家,不管是简历内容,还是自我介绍内容,都要慎重,千万别把自己不会写上去,千万别把不会的吹牛逼说自己会,否则,你将会浪费一次面试机会。
好了,今天就分享这么多,我们下期再见,记得点赞、收藏。
题外话:如果有需要简历修改、简历优化、简历包装、面试辅导、模拟面试、技术辅导、技术支持等,欢迎加我微(tj20120622)。
我的个人技术博客:http://woaijava.cc/
回复77 ,获取《面试小抄2.0版》
回复电子书,获取后端必读的200本电子书籍。
推荐文章
手把手教你写简历,包装、优化!
面试不问java,问MySQL,如何破局?
MySQL 开发规范,非常详细,建议收藏!
手把手教:如何准备面试!
用Spring Boot搞了个医院项目,附源码!
应届生,实力已超6年,太卷了!
相关文章:

中厂,面试就问了4道题,凉了!
你好,我是田哥 所谓的金三银四,已变成铜三铁四了。很多人基本上莫有面试机会,更可惜的是机会有了,却没有把握住。 加入我知识星球:免费做简历优化、简历包装、模拟面试... 今天早上,一个朋友和我说面试中被…...

22.轮播模块
学习要点: 1.轮播模块 本节课我们来开始了解 Layui 的内置模块:轮播模块。 一.轮播模块 1. 轮播模块,即跑马灯等轮播交互场景,先来看下基本设置; <div id"test" class"layui-carousel&qu…...

MYSQL命令小总结
一、创建查看 1.输入cmd,打开控制器,输入如下,打开MYSQL C:\Users\ASUS> mysql -u root -p 2.查看已有数据库 mysql> show databases; 3.建立数据库 4.使用数据库 use englishword;5.建立表单 CREATE TABLE user ( id INT primar…...

Java常见开发工具和Object类
Java是一种面向对象的编程语言,被广泛应用于各种应用程序和软件开发中。在Java开发过程中,使用一个好的开发工具可以大大提高开发效率和代码质量。Eclipse是一个功能强大、灵活易用的Java集成开发环境(IDE),被广泛使用…...

Linux 配置YUM源(FTP方式获取软件源、使用阿里云yum源、同时使用本地源与在线源)YUM获取安装包并生成YUM软件仓库
YUM介绍 YUM(yellow dog updater modified) 基于RPM包构建的软件更新机制 自动解决依赖关系 yum软件仓库集中管理软件包 RPM软件包的来源 centos发布的RPM包集合第三方组织发布的RPM包集合用户自定义的RPM包集合 软件仓库的提供方式 FTP服务:…...

Java版工程行业管理系统源码-专业的工程管理软件-提供一站式服务
Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目显示…...

养老保障金查询系统【GUI/Swing+MySQL】(Java课设)
系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设!!! 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址:https://download.csdn.net/download/qq_50954361/87700421 更多系统资源库…...

国考省考行测:词句理解,词的对象指代,就近原则,主语一致法,语意语境分析上下文找出指代含义
国考省考行测:词句理解,词的对象指代,就近原则,主语一致法,语意语境分析上下文找出指代含义 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论,而常规国…...

部署YUM仓库
部署YUM仓库 YUM概述软件仓库的提供方式RPM软件包的来源FTP源的配置方法本地源配置方法在线源配置方法本地源和在线源一起使用的方法数据包缓存方法 自己配置本地yum源时需要使用createrepo来生成依赖关系库 YUM概述 YUM(Yellow dog Updater Modified) 基于RPM包构建的软件更…...

SpringBoot框架(邮件发送Mail|持久层框架JPA|Extra前后端分离跨域处理|接口管理Swagger)这一篇就够了(超详细)
🙈作者简介:练习时长两年半的Java up主 🙉个人主页:老茶icon 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,计…...

chatGPT对话R语言
文章目录 R语言介绍R语言基本语法R语言常用函数有哪些R语言数据结构向量矩阵数组和列表数组列表 数据框因子 R如何导入数据如何在R语言中导出数据?R语言图形绘制描述性统计描述统计也可以这样来计算 统计推断配对设计t检验样本均数和总体均数t检验两(独立…...

代码随想录--字符串--替换空格题型
①这道题可以直接申请一个临时数组,然后遍历字符串,是空格则加入20%,最后再把临时数组转化为字符串。 怎么把一个数组转化为字符串? 如数组arry[], string newstr new string(arry,0,arry.size()-1); return newstr; 而且临时数…...

Spring JDBC和事务控制
目录 Spring JDBC 和 事务控制主要内容Spring 整合 JDBC 环境构建项目添加依赖坐标添加 jdbc 配置文件编写 spring 配置文件配置数据源C3P0 数据源配置DBCP 数据源配置 模板类配置Spring JDBC 测试 (入门)创建指定数据库创建数据表使用 JUnit 测试JUnit …...

【音视频第16天】详解STUN协议
一个webRTC传输协议搞得自己云里雾里的。现在主动攻克一下。先看看STUN协议。好,我们开始吧 目录 1.讲讲什么是NAT?2.NAT有啥问题?3.四种NAT类型4.STUN Server5.TURN ServerSTUN和TURN的实现:什么是STUN?为什么需要ST…...

C++算法初级11——01背包问题(动态规划2)
C算法初级11——01背包问题(动态规划2) 文章目录 C算法初级11——01背包问题(动态规划2)问题引入0-1背包问题分析0-1背包问题的形式化分析优化 问题引入 辰辰采药 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大…...

Python 库大全(下)
格式化输出 模块 reprlib 提供了一份定制的 repr(),用于简洁 地展示各种大的或者多层嵌套的容器变量: >>> import reprlib >>> reprlib.repr(set(\supercalifragilisticexpialidocious\)) "{\a\, \c\, \d\, \e\, \f\, \g\, ...…...

如何用链表实现LRU缓存淘汰算法
链表学习 一、 缓存1.1缓存介绍1.2 缓存策略 二、链表结构2.1 单链表2.2 循环链表2.3 双向链表2.4 双向循环链表2.5 链表与数组性能对比 三、如何基于链表实现LRU缓存淘汰算法 一、 缓存 1.1缓存介绍 缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有…...

【01】数据结构与算法基础-数据、数据元素、数据项和数据对象 | 数据类型和抽象数据类型 | 抽象数据类型的表示和C++实现
目录) 0.数据结构的研究内容1.数据、数据元素、数据项和数据对象1.1数据1.2数据元素(Data element)和数据项1.3数据项1.4数据对象1.5数据结构(Data Structure)1.6逻辑结构的种类1.7存储结构的种类2.数据类型和抽象数据类型2.1数据类型(Data Type)2.2抽象数据类型(Abstract …...

PHP匿名类的使用场景有哪些?PHP匿名类怎么用?有什么好处?PHP匿名类如何在运行时动态生成?
以下是一些使用匿名类的场景: 2. 简单的工厂模式:当需要在运行时动态创建一些简单的对象时,可以使用匿名类替代创建不必要的类定义和文件。 function createGreeter($name) {return new class($name) {private $name;public function __cons…...

【并发基础】一篇文章带你彻底搞懂Java线程中断的底层原理——interrupt()、interrupted()、isInterrupted()
目录 〇、Java线程中断与阻塞的区别 0.1 线程中断 0.2 线程阻塞 一、线程的中断 二、中断方法 2.1 void interrupt() 2.1.1 可中断的阻塞 2.1.2 不可中断的阻塞 2.1.3 实践案例 2.2 boolean isInterrupted() 2.3 boolean interrupted() 2.4 代码案例 三、源码分析…...

【c语言】函数的数据传递原理 | 数组传入函数方法
创作不易,本篇文章如果帮助到了你,还请点赞支持一下♡>𖥦<)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…...

vue3源码(3)——computed
Vue3中的computed底层源码主要是通过使用Proxy对象来实现的。下面是对Vue3中computed底层源码的详细解读: 在Vue3中,computed的实现是通过使用createComputed函数来创建的。createComputed函数接收两个参数:getter和setter。 在createComput…...

数学建模第七天:数学建模算法篇之插值及MATLAB实现
目录 一、前言 1、引例 2、拟合定义 3、拟合与插值的关系 二、拟合 1、线性最小二乘法求解 ①思路 ②解法 2、MATLAB对线性最小二乘拟合的实现 ①函数说明 ②求解例题 3、MATLAB实现非线性曲线拟合 ①lsqcurvefit函数 ②代码求解 4、MATLAB实现非线性最小二乘拟…...

RUST 每日一省:生命周期作用域
生命周期 一个变量的生命周期就是它从创建到销毁的整个过程。 作用域 我们声明的每个变量都有作用域。作用域其实是变量和值存在的环境。作用域是由一对花括号表示的。例如,使用块表达式会创建一个作用域,即任何以花括号开头和结尾的表达式。此…...

【过程8】——能量守恒视角总结感受
一、背景 另一个角度的看到,观望着过程中自己曾经类似的经历(小舅子的工作)。 时间久了,经历多了,感悟会更加的充实;最近自己对于人在维持能量的过程中也有很多的感悟,一并做一下总结 二、过程 1.人为什么天性不愿意…...

kong(4):限流配置
Kong 提供了 Rate Limiting 插件,实现对请求的限流功能,避免过大的请求量过大,将后端服务打挂。 Rate Limiting 支持秒/分/小时/日/月/年多种时间维度的限流,并且可以组合使用。例如说:限制每秒最 多 100 次请求&…...

人脸识别 Face Recognition 入门
人脸识别 Face Recognition 入门概述 总述传统特征方法深度学习方法损失函数改进基于欧几里德和距离的损失基于角度/余弦边距的损失SoftMax 损失及其变体 一级标题二级标题二级标题二级标题 找论文搭配 Sci-Hub 食用更佳 💪 Sci-Hub 实时更新 : https://tool.yovisu…...

【AI绘画】Midjourney的使用及程序示例
Midjourney 1.背景2.Midjourney的原理3.Midjourney的使用方法4.Midjourney的示例代码 1.背景 Midjourney 是一款基于深度学习的图像转换工具,其可以将一张图像转换成具有不同风格的图像,例如将一张照片转换成卡通风格的图像。Midjourney 基于 TensorFlow…...

无公网IP?教你在外远程访问本地wamp服务器「内网穿透」
目录 前言 1.Wamp服务器搭建 1.1 Wamp下载和安装 1.2 Wamp网页测试 2. Cpolar内网穿透的安装和注册 2.1 本地网页发布 2.2 Cpolar云端设置 2.3 Cpolar本地设置 3. 公网访问测试 4. 结语 前言 软件技术的发展日新月异,各种能方便我们生活、工作和娱乐的新…...

leetcode 628. 三个数的最大乘积
题目描述解题思路执行结果 leetcode 628. 三个数的最大乘积 题目描述 三个数的最大乘积 给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。 示例 1: 输入:nums [1,2,3] 输出:6 示例 2&…...