首页 > 其他分享 >面试八股文

面试八股文

时间:2024-04-01 15:55:52浏览次数:9  
标签:八股文 索引 查询 面试 实例 引用 类型 内存

一、数据库优化

大数据表分页查询优化
浅分页 
深分页 Id

大数据表分表
分表后查询/分页查询


索引优化
where 设置组合索引,根据查询条件热度来排序
避免索引失效
1)遵循最佳左前缀法则:如果使用组合索引,查询条件必须按组合索引字段排序
2)不在索引列上做任何计算操作
3)使用like时不要以通配符开头
4)不要使用is not null或者!=
5)存储引擎不能使用索引中范围条件右边的列
6)不要使用OR

排序优化
where+orderby 设置组合索引,根据查询条件热度来排序
满足最左前缀法则

连表查询优化
A left join B  A为驱动表,必须全表扫描
把数据量少的表作为驱动表,右边大数据表连表字段建立索引

分组优化 group by
where group by设置组合索引,根据查询条件热度来排序
满足最左前缀法则

开启慢查询日志

二、Rabbitmq三大问题解决思路

消费堆积:消费者故障、消费者消费慢
临时处理
1、如果是由于消费者故障引起,先恢复消费者
2、增加消费者消费消息
3、增加临时消费者先将队列数据写入数据库中,低峰或空闲时将数据库消息重新加载到队列中进行消费
处理完成以后
1、优化消费者,提高消费者消费速度

消息重复消费问题:生产者重复发送消息、消费者重复消费
1、为每一条消息增加一个唯一ID,消费时判断redis中是否存储这个ID,存在则丢弃,不存在则消费,并将ID存入redis
2、设计消费方法幂等性

消息丢失问题
1、开启生产者应答模式,开启数据持久化
2、开启消费者手动应答模式
3、使用集群

三、C#基础

1>静态构造函数(执行一次,调用静态成员或实例化时执行一次)
2>抽象类和接口的区别
1:抽象类有字段,构造函数,非抽象方法,接口没有 
2:抽象类不可多继承,接口可以
3:接口成员默认修饰符为public,不可显示声明其他修饰符,抽象类成员可使用多种访问修饰符
3>值类型(int,float,dobule,bool,char,stru)直接存放在栈上,引用类型(string,interface,class,detegate,event)地址引用存放在栈上,数据存放在堆上。当值类型作为引用类型的成员时,可能数据会被存放到堆上,垃圾回收器会自动回堆上的数据
      当栈上的引用地址超出作用域或者被销毁时,对堆上的引用会被删除,而垃圾回收器的机制是回收堆上没有被引用的数据
装箱:把值类型转换成引用类型
拆箱:把引用类型转换成值类型
装箱:对值类型在堆中分配一个对象实例,并将该值复制到新的对象中。
(1)第一步:新分配托管堆内存(大小为值类型实例大小加上一个方法表指针。
(2)第二步:将值类型的实例字段拷贝到新分配的内存中。
(3)第三步:返回托管堆中新分配对象的地址。这个地址就是一个指向对象的引用了。
拆箱:检查对象实例,确保它是给定值类型的一个装箱值。将该值从实例复制到值类型变量中。
在装箱时是不需要显式的类型转换的,不过拆箱需要显式的类型转换。
int i=0;
System.Object obj=i; //这个过程就是装箱!就是将 i 装箱!
int j=(int)obj;//这个过程 obj 拆箱!
4>const和readonly有什么区别?
都可以标识一个常量。主要有以下区别:
1、初始化位置不同。const必须在声明的同时赋值;readonly即可以在声明处赋值;
2、修饰对象不同。const即可以修饰类的字段,也可以修饰局部变量;readonly只能修饰类的字段
3、const是编译时常量,在编译时确定该值;readonly是运行时常量,在运行时确定该值。
4、const默认是静态的;而readonly如果设置成静态需要显示声明
5、修饰引用类型时不同,const只能修饰string或值为null的其他引用类型;readonly可以是任何类型。
5>1byte=2V8(0-255)=1个字符=0.5个汉字
6>ref外部初始化 out内部初始化
7>&和&&都可作为逻辑与,但是&&具有短路功能
8>class可以被实例化,属于引用类型,
class可以实现接口和单继承其他类,还可以作为基类型,是分配在内存的堆上的
struct属于值类型,不能作为基类型,但是可以实现接口,是分配在内存的栈上的.
9>new关键字的作用
运算符:创建对象实例
修饰符:在派生类定义一个重名的方法,隐藏掉基类方法
约束:泛型约束定义,约束可使用的泛型类型
10>C#中类(class)与结构(struct)的异同?
class可以被实例化,属于引用类型,
class可以实现接口和单继承其他类,还可以作为基类型,是分配在内存的堆上的
struct属于值类型,不能作为基类型,但是可以实现接口,是分配在内存的栈上的
11>C# 中static关键字的作用?
对类有意义的字段和方法使用static关键字修饰,称为静态成员,通过类名加访问操作符“.”进行访问; 对
类的实例有意义的字段和方法不加static关键字,称为非静态成员或实例成员。
注: 静态字段在内存中只有一个拷贝,非静态字段则是在每个实例对象中拥有一个拷贝。而方法无论是否
为静态,在内存中只会有一份拷贝,区别只是通过类名来访问还是通过实例名来访问。
12>虚函数:有方法体,在子类中可选择性重写,抽象函数:只有定义,必须在子类中重写
13>能用foreach遍历访问的对象的要求
需要实现IEnumerable接口或声明GetEnumerator方法的类型
14>is和as有什么区别?
在C#中,is是用来判断类型A能否转化为类型B,一般用来作有继承关系的父类与子类是
否可以相互转化的判断。而as是将类型A转化为类型B,一般也是用来做子类与父类的转换
15>new关键字作用 1、创建对象 2、隐藏父类成员 3、约束
16>MySQL有多种存储引擎(主要有MyISAM,InnoDB(默认))
InnoDB 支持事务,MyISAM 不支持
InnoDB 支持外键,而 MyISAM 不支持
InnoDB 必须要有主键,MyISAM可以没有主键
17>聚集索引:只能有一个,字段值只必须唯一,一般为主键,索引记录为物理顺序
非聚集索引:可有多个,字段值不要求唯一,索引记录为逻辑顺序
索引合并的限制就是只能用单表条件,多表查询时如果使用多表条件,索引会失效,可以使用union

 

标签:八股文,索引,查询,面试,实例,引用,类型,内存
From: https://www.cnblogs.com/daiwk/p/18108630

相关文章

  • 【吊打面试官系列】Redis篇 -都有哪些办法可以降低 Redis 的内存使用情况呢?
    大家好,我是锋哥。今天分享关于【都有哪些办法可以降低Redis的内存使用情况呢?】面试题,希望对大家有帮助;都有哪些办法可以降低Redis的内存使用情况呢?如果你使用的是32位的Redis实例,可以好好利用Hash,list,sortedset,set等集合类型数据,因为通常情况下很多小的Key......
  • 微服务篇---springcloud高频面试题(2)☁️
    SpringCloud项目中有没有做过限流?怎么做的?Nginx限流-控制速率Nginx限流-控制连接数......
  • 【数据库】[MYSQL][面试题]常见数据库知识整理
    常见数据库:MySQL:是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL使用C和C++编写,并使用了多种编译器进行测试,保证了源代码的可移植性。支持多线程,充分利用CPU资源。提供多语言支持......
  • Java基础-JDK,JRE,JVM面试题
    目录1、JDK2、JRE3、JVM(1)JVM的跨语言特性(2)垃圾回收机制(GC)(3)内存溢出(OOM)(4)内存泄漏(5)内存溢出与内存泄漏的关系1、JDKJavaDevelopmentKit,Java开发工具包,包含JRE、开发工具(javac编译、java运行、jdb调试、jar打包);2、JREJavaRuntimeEnvironment,Java运行时环境,包含JV......
  • 面试用
    项目名称一行《基于大语言模型的博物馆导览系统》另起一行写技术栈前端技术:HTML:HTML(HyperTextMarkupLanguage)是一种标记语言,用于构建网页的结构和内容。网页结构和布局:HTML用于定义网页的结构和布局,包括页面的标题、导航栏、侧边栏、内容区域等。你可以使用HTML元素和标......
  • 【前端面试3+1】06继承方式及优缺点、缓存策略、url输入到渲染全过程、【二叉树中序遍
    一、继承有哪些方式?以及优缺点        继承的方式包括原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承和组合式继承。1.原型链继承:实现方式:将子类的原型指向父类的实例来实现继承。优点:简单易懂,代码量少。缺点:存在引用类型共享的问题。functionPare......
  • 【前端面试3+1】07vue2和vue3的区别、vue3响应原理及为什么使用proxy、vue的生命周期
    一、vue2和vue3的区别1.性能优化:        Vue3在性能方面有很大的提升,主要是通过虚拟DOM的优化和响应式系统的改进实现的。虚拟DOM重构:Vue3中对虚拟DOM进行了重构,使得更新算法更加高效,减少了更新时的开销,提升了性能。静态树提升:Vue3可以通过静态树提升技术......
  • 【前端面试3+1】01闭包、跨域、路由模式
    一、对闭包的理解定义:闭包是指在一个函数内部定义的函数,并且该内部函数可以访问外部函数的变量。闭包使得函数内部的变量在函数执行完后仍然可以被访问和操作。特点:闭包可以访问外部函数的变量,即使外部函数已经执行完毕。闭包可以保持外部函数的作用域不被销毁,从而延长变......
  • 史上最全Java核心面试题(带全部答案)2024年最新版
    今天要谈的主题是关于求职,求职是在每个技术人员的生涯中都要经历多次。对于我们大部分人而言,在进入自己心仪的公司之前少不了准备工作,有一份全面细致面试题将帮助我们减少许多麻烦。在跳槽季来临之前,特地做这个系列的文章,一方面帮助自己巩固下基础,另一方面也希望帮助想要换工......
  • 学习笔记之嵌入式八股文(C语言)
    文章目录前言一、指针和变量二、关键字1.Volatile2.const3.static4.extern三、结构体1.结构体基本内容2.通过指针对结构体赋值3.结构体指针四、链表1.链表的基本内容2.链表的插入和删除五、堆、栈和队列1.栈(Stack)2.堆(Heap)3.队列前言笔者在学习时发......