面试宝典(知识点总结)

本文涵盖了Java面试中常见的知识点,包括数据库操作、JDK1.8 HashMap变化、Redis优势、SpringCloud组件详解、线程与多线程、设计模式、算法、网络协议、Servlet、JVM内存管理、数据库连接池等,旨在帮助准备面试者巩固核心概念和技术要点。
摘要由CSDN通过智能技术生成

varchar和nvarchar区别

1、varchar是非Unicode编码,nvarchar是Unicode编码;

2、varchar的最大值是8000,nvarchar是4000;

3、varchar能存储的字节数是它的长度,nvarchar能存储的字节数是它长度的2倍;

4、varchar比nvarchar更省空间。


表单重复提交解决办法?

前端:设置按钮只触发一次,提交按钮变灰。

后端:使用token+session

         第一步,用户调用后台接口;

         第二步,后台生成sessionToken传到前端;

         第三步,前端将sessionToken传到后台;

         第四步,后台将第一次生成的sessionToken和前端传来的sessionToken进行对比,如果一致就可以提交表单,不一致就表示表单重复提交了。


mysql大数据量存储

按规则进行分库分表


JDK1.8中HashMap的变化

1.8之前:HashMap处理“碰撞”的时候,都采用链表来存储,当碰撞的节点很多时,查询时间是O(n).

1.8中:HashMap处理“碰撞”增加了红黑树数据结构,当碰撞节点较少时,采用红黑树存储,当较大时(>8个),采用红黑树存储。


Redis缓存的优势

1、读写性能很高;

2、redis支持多种数据类型。存储的是key-value格式的数据,其中key是字符串,value的数据类型有String、list、set、有序集合zset(sorted  set);

3、非关系型数据库;

4、持久化:redis的持久化方式有rdb和aof两种;rdb是将内存中的数据压缩后写入到硬盘上,aof是将日志整理写到硬盘中,并设置不同的持久化方式,有效的额减轻了服务器的压力,同时在很大程度上防止了数据的丢失。


SpringCloud

组件

        Eureka(注册中心):各个服务启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉取注册表,从而知道其他服务在哪里。由服务端和客户端组成;服务端:做服务注册中心,客户端:用来处理服务注册与发现;在应用启动时,客户端向服务端注册自己的服务信息,同时将服务端的服务信息缓存到本地,客户端会和服务端周期性的进行心跳交互,以更新服务租约和服务信息。

        Ribbon(客服端负载均衡):服务间发起请求的时候,基于Ribbon做负载均衡,从一个服务的多台机器中选择一台。

        Feign:基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求

        Hystrix(断路器):起请求是通过Hystrix的线程池来走的,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。

        Netflix Zuul(服务网关):如果前端、移动端要调用后端系统,统一从Zuul网关进入,由Zuul网关转发请求给对应的服务。

        Spring Cloud Config(分布式配置):配置管理,提供服务器端和客户端。

详细讲解可以查看:https://blog.csdn.net/yeyazhishang/article/details/84344402


表结构及索引优化

1、分库分表、读写分离;

2、为字段选择合适的数据类型;

3、将字段多的表分解成多个表,增加中间表;

4、混用范式和反范式,适当冗余;

5、为查询创建必要索引,但避免滥用;

6、列字段尽量设置为not  null。


SQL优化

1、寻找最需要优化的语句:分析满查询日志;

2、利用分析工具:explain、profile;

3、避免使用select  * ,只取需要的列;

4、使用索引扫描排序;

5、避免where子句对字段进行null值判断;

6、避免where子句使用 !=、<>操作符和or连接条件;

7、连续的数值,能用between就不要用in

建表三范式:原子性、主键唯一性、减少表与表之间的字段冗余

补充:

创建索引注意事项

           1、增删改操作较多的表不要创建索引;

           2、不要在大的文本字段或超长字段建立索引;

           3、不要在取值朝一个方向增加的字段(如:日期)上创建索引

索引何时失效

           1、like未使用最左前缀,如where   A   like   "%China";

           2、搜索一个索引而在另一个索引上做order  by;

           3、or会使索引失效;

           4、若列是字符串类型,要使用引号


JDBC连接数据库的步骤

1、加载驱动;

2、创建数据库连接;

3、创建Statement对象,执行SQL语句;

4、获取结果集,遍历结果集;

5、关闭资源,关闭数据库。


Servlet生命周期

首先:加载servlet的class,实例化servlet;

然后:初始化servlet调用init()方法;

其次:调用服务的service的方法处理doGet()和doPost()方法;

最后:关闭容器时调用destroy()销毁方法。


JAVA特性

封装:将对象的属性私有化,对外提供get,set方法,隐藏具体的实现

继承:子类继承父类的属性和方法,并根据需要扩展新的属性和方法,提高了代码的复用性

多态:一种事物的不同表现形态。例如:重写和重载


Throwable

Throwable继承自Object类,子类主要是Error和Exception类。
    Error:程序无法处理的错误,只能重启系统。
    Exception:运行时异常和非运行时异常;
            运行时异常:只有运行时才会出错,所以不需要try catch捕获,由虚拟机帮我们捕获;
            非运行时异常:写代码的时候出错会提醒我们try catch或throws;

常见的运行时异常
    1、ClassCastException;
    2、ClassNotFoundException;
    3、IndexOutBoundsException;
    4、NullPointerException;
    5、ArrayStoreException;
    6、SQLException;
    7、ArithmeticException;
    8、NumberFormatException
常见的非运行时异常
    1、IOException;
    2、FileNotFoundException


Nginx(负载均衡器)

是一个高性能的WEB服务器和反向代理服务,最常用的软件负载均衡器。(网易、淘宝、腾讯、新浪等等互联网公司)

核心概念:用户请求先到Nginx,再由Nginx转发请求到后面的应用服务器(如:Tomcat)

Nginx常用作Http反向代理(接收和转发请求)

Http请求的处理包括解析和封装Http内容

负载均衡算法:1、轮循均衡,2、权重轮循均衡,3、随机均衡

LVS-负载均衡器

核心概念:原本是请求LVS服务器的数据包,被LVS软件篡改了数据包的目的地,将流量转移到了Nginx所在的机器IP,从而实现负载均衡

LVS属于七层协议中的第四层-传输层,使用的协议(如TCP)内容比Http简单,解析和组装所消耗的CPU、内存等资源比Nginx要低,所以LVS比Nginx快,另外Nginx支持1W~10W并发,而LVS支持10W~50W并发

常用组合:Nginx+Tomcat或者LVS+Nginx+Tomcat


Dubbo

dubbo是一个由阿里巴巴开源的、分布式的RPC(Remote  Procedure  Call   Protocol-远程过程调用)和微服务架构,现为Apache顶级项目

Dubbo提供了三个关键功能:

  1. 基于接口的远程调用;
  2. 容错和负载均衡;
  3. 服务自动注册与发现

Dubbo结构图:

Container:服务运行容器;

Provider:暴露服务的服务提供方;

Registry:服务注册与发现的注册中心;

Consumer:调用远程服务的服务消费方;

Monitor:统计服务的调用次数和调用时间的监控中心


SpringMVC

请求处理流程图:

①:DispatcherServlet是springmvc中的前端控制器(front controller),负责接收request并将request转发给对应的处理组件.

②:HanlerMapping是springmvc中完成url到controller映射的组件.DispatcherServlet接收requ

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
关于java程序员发展需要学习的路线整理集合 技术 应用技术 计算机基础知识 cpu mem disk net 线程,进程 第三方库 poi Jsoup zxing Gson 数据结构 树 栈 链表 队列 图 操作系统 linux 代码控制 自动化代码检查 sonar 代码规范 阿里巴巴Java开发规范手册 UMPAY——编码规范 日志规范 异常规范 网络 协议 TCP/IP HTTP hession file HTTPS 负载均衡 容器 JBOSS tomcat resin jetty 容灾 日志框架 开源框架 slf4j 框架实现 log4j logback commong logging jdk logger 测试框架 测试框架 junit easymock testng mockito bug管理 禅道 jira 开发工具 编程工具 eclipse myeclipse idea vi VS webstorm sublime text 版本控制 svn git 项目管理 maven Nexus Jenkins 工作软件 反编译软件 office系列 下载器 adobe系列 记录软件 思维导图 office--Note 邮件管理 性能优化 分层优化 系统级别 中间件级别 JVM级别 代码级别 分段优化 前端 web应用 服务应用 资源池 数据库 大数据与nosql zookeeper hadoop hbase mongodb strom spark java语言 语言语法基础 异常 泛型 内部类 反射 序列化 nIo 匿名类 包装类 优先级 引用 语言工具类库 容器类 集合 链表 map 工具类 系统类 日期类 数字类 字符串+正则 流 字符流 字节流 语言特性 继承 封装 多态 JVM 多线程与并发 GC机制 GC收集器类型 串行 CMS 并行 G1 算法 复制 标记清理 标记整理 分区 新生代 eden survivor 老年代(old区) 永久代(perm区) 版本变化 1.5 1.6 1.7 1.8 1.9 IO/NIO IO类型 同步阻塞 同步非阻塞 基于信号 多路复用 异步IO 类加载机制 双亲委派 OSGI 算法 搜索 二分 排序 选择 冒泡 插入 快速 归并 堆 桶 基数 常用算法 贪婪 回溯 剪枝 动态规划 数据挖掘算法 KMP算法 GZZ算法 HASH分桶 关联规则算法 APRORIVE算法 分布式 负载均衡 水平伸缩 集群 分片 Key-hash 异步 一致性hash 消峰 分库分表 锁 悲观锁 乐观锁 行级锁 分布式锁 分区排队 一致性 一致性算法 paxos zab nwr raft gossip 柔性事务(TCC) 一致性原理 CAP BASE 中间件 数据库 mysql 存储引擎 索引 锁 oracle db2 缓存 redis 数据结构 持久 复制 cas 单线程 memcache eacache Tair 消息队列 jms Queue Topic kafka 持久 复制 Stream Partition rocketMQ RabbitMQ ActiveMQ 常用开源框架 Spring Spring MVC Spring WebFlow spring tx aop ioc Struts ibatis Mybatis CAS Dubbo 工作能力 软实力 应急能力 创新能力 管理能力 分享能力 学习能力 沟通能力 解决问题能力 经历 技术攻关案例 程序开发案例 程序设计案例 设计 设计原则 单一职责原则 开闭原则 里氏替换原则 依赖倒转原则 接口隔离原则 迪米特原则 设计模式 结构模式 适配器模式 桥接模式 组合模式 装饰模式 外观模式 享元模式 代理模式 创建模式 抽象工厂模式 工厂方法模式 建造这模式 原型模式 单例模式 行为模式 责任链模式 命令模式 解释器模式 迭代器模式 中介者模式 备忘录模式 观察者模式 状态模式 策略模式 模板方法模式 访问者模式 设计案例 UML 架构 系统架构能力 基本理论 扩展性设计 可用性设计 可靠性设计 一致性设计 负载均衡设计 过载保护设计 协议设计 二进制协议 文本协议 接入层架构设计 DNS轮询 动静态分离 静态化 反向代理 LVS F5 CDN 逻辑层架构设计 连接池 串行化技术 影子Master架构 批量写入 配置中心 去中心化 通讯机制 同步 RPC RMI 异步 MQ Cron 数据层架构设计 缓存优化 DAO&ORM; 双主架构 主从同步 读写分离 性能优化架构能力 代码级别 关联代码优化 cache对其 分支预测 copy on write 内联优化 系统优化 cache 延迟计算 数据预读 异步 轮询与通知 内存池 模块化 工程架构能力 开发语言 运维与监控 监控 系统监控 日志监控 流量监控 接口监控 数据库监控 业务监控 性能监控 告警 日志 设计模式 数据结构与算法 各种工具
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值