工作五年,面试官说我只会CRUD!竟然只给我10K!

目录

前言

消息队列

搜索引擎

缓存

分库分表

读写分离

分布式系统

系统拆分

分布式服务框架

分布式锁

分布式事务

分布式会话

高可用架构

高可用系统

限流

熔断

降级

数据库CRUD操作

1.删除表   drop table 表名称

2.修改表  

3.删除数据库

CRUD操作

  1、添加数据(create)

2、删除数据(delete)

3、修改数据(uodate)

4、查询数据(10种)

总结一下


前言

crud是指在做计算处理时的增加(Create)、读取(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。crud主要被用在描述软件系统中数据库或者持久层的基本操作功能。你可能有所感悟。零散的资料读了很多,但是很难有提升。到处是干货,但是并没什么用,简单来说就是缺乏系统化。另外,噪音太多,雷同的框架一大把,我不至于全都要去学了吧。

这里,根据基础、Java基础、Java进阶给分了下类,挑的也都是最常用最重要的工具。

消息队列

  • 为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么优点和缺点?

  • 如何保证消息队列的高可用?

  • 如何保证消息不被重复消费?(如何保证消息消费时的幂等性)

  • 如何保证消息的可靠性传输?(如何处理消息丢失的问题)

  • 如何保证消息的顺序性?

  • 如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决?

  • 如果让你写一个消息队列,该如何进行架构设计啊?说一下你的思路。

搜索引擎

  • es 的分布式架构原理能说一下么(es 是如何实现分布式的啊)?

  • es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗?

  • es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?

  • es 生产集群的部署架构是什么?每个索引的数据量大概有多少?每个索引大概有多少个分片?

缓存

  • 在项目中缓存是如何使用的?缓存如果使用不当会造成什么后果?

  • Redis 和 Memcached 有什么区别?Redis 的线程模型是什么?为什么单线程的 Redis 比多线程的 Memcached 效率要高得多?

  • Redis 都有哪些数据类型?分别在哪些场景下使用比较合适?

  • Redis 的过期策略都有哪些?手写一下 LRU 代码实现?

  • 如何保证 Redis 高并发、高可用?Redis 的主从复制原理能介绍一下么?Redis 的哨兵原理能介绍一下么?

  • Redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的?

  • Redis 集群模式的工作原理能说一下么?在集群模式下,Redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?如何动态增加和删除一个节点?

  • 了解什么是 Redis 的雪崩和穿透?Redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 Redis 的穿透?

  • 如何保证缓存与数据库的双写一致性?

  • Redis 的并发竞争问题是什么?如何解决这个问题?了解 Redis 事务的 CAS 方案吗?

  • 生产环境中的 Redis 是怎么部署的?

分库分表

  • 为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?你们具体是如何对数据库如何进行垂直拆分或水平拆分的?

  • 现在有一个未分库分表的系统,未来要分库分表,如何设计才可以让系统从未分库分表动态切换到分库分表上?

  • 如何设计可以动态扩容缩容的分库分表方案?

  • 分库分表之后,id 主键如何处理?

读写分离

  • 如何实现 MySQL 的读写分离?MySQL 主从复制原理是啥?如何解决 MySQL 主从同步的延时问题?

高并发系统

  • 如何设计一个高并发系统?

  • 限流算法实现

  • 系统基本架构

分布式系统

  • 什么是分布式系统?

  • 分布式系统利弊

  • 分布式系统背景

系统拆分

  • 为什么要进行系统拆分?如何进行系统拆分?拆分后不用 Dubbo 可以吗?

分布式服务框架

  • 说一下 Dubbo 的工作原理?注册中心挂了可以继续通信吗?

  • Dubbo 支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为什么 PB 的效率是最高的?

  • Dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略呢?

  • Dubbo 的 spi 思想是什么?

  • 如何基于 Dubbo 进行服务治理、服务降级、失败重试以及超时重试?

  • 分布式服务接口的幂等性如何设计(比如不能重复扣款)?

  • 分布式服务接口请求的顺序性如何保证?

  • 如何自己设计一个类似 Dubbo 的 rpc 框架?

分布式锁

  • Zookeeper 都有哪些应用场景?

  • 使用 Redis 如何设计分布式锁?使用 Zookeeper 来设计分布式锁可以吗?以上两种分布式锁的实现方式哪种效率比较高?

分布式事务

  • 分布式事务了解吗?你们如何解决分布式事务问题的?TCC 如果出现网络连不通怎么办?XA 的一致性如何保证?

分布式会话

  • 集群部署时的分布式 Session 如何实现?

高可用架构

  • Hystrix 介绍

  • 电商网站详情页系统架构

高可用系统

  • 如何设计一个高可用系统?

限流

  • 如何限流?在工作中是怎么做的?说一下具体的实现?

熔断

  • 如何进行熔断?

  • 熔断框架都有哪些?具体实现原理知道吗?

降级

  • 如何进行降级?

数据库CRUD操作

1.删除表   drop table 表名称

2.修改表  

alter   table 表名称 add  列名 数据类型   (add表示添加一列)

alter  table  表名称 drop column 列名称( column表示列   drop表示删除)

3.删除数据库

drop database 数据库

CRUD操作

(create 添加数据read读取数据 update 修改数据delete删除数据)

  1、添加数据(create)

a:      insert into + nation values('n002 ','回族 ')--加单引号是转为字符串,英文的

b:    insert into nation values('n003',' ')    只添加一列  后面的是空    给所有的添加可以用

c:    insert into nation(code,) values('n004')  给某一列添加可以用

d:给多列添加     insert into nation(code,name) values('n004','维吾尔族') 

e: 专门添加自增长列的    insert into 表名 values('p001','p006')  自增长列不用管,直接写第二列

2、删除数据(delete)

   delete from +表名称--删除表中所有内容

   delete from +表名称 where ids=5  (删除此行)---where后面跟一个条件

   

3、修改数据(uodate)

update +表名称 set +列名称=' '      set(设置)---修改所有的内容这一列的

update +表名称 set +列名称='p006 ' where ids=6

  

update +表名称 set +列名称='p006 ',列名称='p002' where ids=6-----用逗号隔开可以修改多列

整数型(int)的不需要加单引号      0 (false)1(true)

4、查询数据(10种)

a1:简单查询

  select * from  表名称   ——查询表中所有数据     *代表所有列

  select code,name from 表名称——查询指定列数据

   select code,name from 表名称——查指定列的数据

select code as'代号',name as'姓名' from 表名称——给列指定别名

a2:条件查询

select * from 表名 where code=' '   查这一行

select * from 表名 where sex='true' and nation=' '   表示并列,--多条件并的关系

select * from 表名 where sex='true' or nation=' ' --多条件或的关系

a3:范围查询

select * from 表名 where 列名>40 and 列名<50

select * from 表名 where 列名 between 40 and 50  --专用于范围查询

  a4:离散查询

  select * from 表名 where 列名 in (' ',' ',' ')

  select * from 表名 where 列名 not in (' ',' ',' ')  反选,不在里面的

a5:模糊查询

 select * from 表名 where 列名 like '%宝马%'——查包含宝马的

select * from 表名 where 列名 like '宝马%'——查以宝马开头的

select * from 表名 where 列名 like '%宝马'——查以宝马结尾的

select * from 表名 where 列名 like '宝马'——查等于宝马的

select * from 表名 where 列名 like '--E'——查第三个是E的

% 代表是任意多个字符

- 下划线 代表是一个字符

a6:排序查询

select * from 表名 order by 列名——默认升序排序

select * from 表名 order by 列名 desc——降序排列

select * from 表名 order by 列名 desc, 列名 asc——多个条件排序   , 前面是主条件 后面是次要条件

desc 降序  ,asc 升序, order by  排序  根据哪一列排序

a7:分页查询

select top 5 * from 表名——查询前5条数据

select top 5 * from 表名 where code not in (select top 5 code from car)

a8:去重查询(去掉重复的)

select distinct 列名 from

a9:分组查询

select Brand from 表名 group by Brand having count(*)>2

group by    having ——表示根据一列分组 ,count(*)>2——每一组的数量

a10:聚合函数(统计查询)

select count (*) from 表名——查询所有数据条数(每一列的)

select count (列名主键) from 表名——查询这列的所有数据条数(执行快)

select sum (列名) from 表名——求和

select avg  (列名) from 表名——求平均值

select max (列名) from 表名——求最大值

select min (列名) from 表名——求最小值

总结一下

Java后端做三件事,向前一件事,向后两件事。向前负责API交互,也就是Web。向后集成第三方服务,不同类型的数据库是一类,其他第三方技术是另一类。在这三件事之上都是架构范畴的事情,例如微服务等等。CRUD也见水平,有些人代码写的很漂亮,阅读性很高,看着很舒服;有些代码写完,可能自己都不想看第二遍了,所以有一定CRUD经验后,设计模式是绕不开的。

最后来自小编的福利

以下的面试题及答案是小编整理许久整理成的合集,需要领取的小伙伴可以 点我 免费领取 ,在这里小编祝福想去大厂面试的同学,旗开得胜,offer拿到手抽筋。

部分资料图片:

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页