Java基础总结

1.java基础知识

1. 静态变量和实例变量的区别

静态变量也称之为类变量,归全类共有,可以通过类名直接访问;

实例变量必须依存于某一实例,只能通过对象才能访问

2. List Set Map的区别

List和Set继承了Collection接口,Map不是;

List存放的元素是有序可重复的; Set存放的是无序不可重复的; Map中存放键值对

3. String StringBuffer 和StringBuilder

运行速度: StringBuilder > StringBuffer > String;

线程安全: StringBuilder 线程不安全 StringBuffer是线程安全的;

StringBuilder适用于单线程下在字符缓冲区进行大量操作, StringBuffer适用于多线程在字符缓冲区进行大量操作

String适用于少量的字符串操作

4.java中几种类型的流 提供了哪些抽象类以供继承

字节流 字符流 ;

InputStream OutputStream Reader Writer

5.什么是事务处理

事务处理确保多个SQL语句被当作单个单元来处理

作用: 一致性 同时进行的查询和更新彼此不会冲突,互相不会看到发生了改变未提交的数据

可恢复性: 一旦系统故障,数据库会自动完全恢复未完成的事务.

6. hashcode()方法的作用

hashcode()方法主要配合基于散列的集合一起使用, 比如HashSet HashMap

当集合需要添加新的对象时,先调用这个对象的hashcode()方法,得到对应的hashcode值,实际上hashmap中会有一个table保存已经存进去的对象的hashcode值,如果table中没有改hashcode值,则直接存入,如果有,就调用equals方法与新元素进行比较,相同就不存了,不同就存入。

7.equals和hashcode的关系

如果equals为true,hashcode一定相等;

如果equals为false,hashcode不一定不相等;

如果hashcode值相等,equals不一定相等;

如果hashcode值不等,equals一定不等;

8.悲观锁和乐观锁

悲观锁:进行加锁操作后,使得该对象变为该线程的独有对象

缺陷:线程切换要不停的释放和获取锁 会导致优先级倒置,synchronized锁是一种典型的悲观锁。

乐观锁:认为对对象的操作不会引发冲突,只在最后提交更改时验证是否发生冲突,如果冲突则再试一遍知道成功为止,也称为自旋

9.java中wait和sleep方法的不同

最大的不同是在 等待时wait会 释放锁,而sleep一直持有锁。

sleep属于Thread类,wait属于object类

10.反射

1.获取Class对象的三种方式:Class.forName(“全类名”) 类名.class 对象.getClass()

2.原理: 能够在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法,

对于任意一个对象,都能够调用它的任意方法和属性, 这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

11.线程

什么是线程: 进程中的一个实体,一个执行路径,线程组 之间只能共享所属进程的资源

12.==和equals的区别

对于基本类型,==比较的是值;;

对于引用类型,==比较的是地址;

equals不能用于基本类型的比较;

如果没有重写equals,就相当于==;

重写了equals方法,比较的是对象的内容

13.final在Java中的作用

final修饰的成员变量,一旦创建不可修改

修饰的方法,不能被子类重写,但是可以重载

修饰基本类型变量,则其数值一旦初始化之后便不可更改

修饰引用类型变量,则其初始化之后不能再让其指向另一个对象,但引用的值是可变的。

14.如何将字符串反转

将对象封装到StringBuilder中,调用reverse()方法反转

15.Java中有哪些引用类型

强引用 软引用 弱引用 引用队列

16.JDK和JRE区别

JDK: java开发工具包

JRE: java运行环境

JDK中包含JRE JDK中有一个名为jre的目录包含两个文件夹bin和lib bin就是JVM,lib就是JVM工作所需的类库。

17.String类的常用方法都有哪些

equals、length、contains、hashcode、、indexof、subString、trim、toUpperCase、toLowerCase、isEmpty等等。

18.ArrayList和LinkedList的区别

ArrayList是动态数组的数据结构实现,查找和 遍历效率较高

LinkedList 是双向链表的数据结构,增删的效率高

19.char 和 varchar 的区别

char的长度是固定的,varchar的长度是可变的

char的效率比varchar的效率高

20.java动态代理

代理模式: 为其他对象提供一种代理以控制对这个对象的访问

真正对象和代理对象是实现同一个接口,先访问代理类再访问要访问的对象

代理模式分为: 静态代理、动态代理

优点: 保护对象 高扩展性

21.泛型

优点: 类型安全 消除强制类型转换 更高的效率

泛型类型必须为引用数据类型

三种使用方式: 泛型类 泛型接口 泛型方法

22.注解

用于为java代码提供元数据(用来描述数据的数据)

基本语法@interface

元注解: 可以用到注解上的注解 或者说是一种基本注解

常用:@Retention() 说明生命周期

RetentionPolicy.SOURCE 只在源码阶段保留

RetentionPolicy.CLASS只被保留到编译进行时,不会被加载到JVM中

RetentionPolicy.RUNTIME 可以保留到程序运行时,会被加载到JVM中

@Target 注解运用的地方

ElementType.FIELD 可以给属性进行注解

ElementType.METHOD 可以给方法进行注解

ElementType.TYPE 可以给一个类型进行注解,比如类、接口

23.面向对象

相比面向过程,面向过程比较直接高效,面向对象更易于复用、扩展、维护

封装:封装的意义在于明确标识出允许外部使用的所有成员函数和数据项,外部调用无需修改或者关心内部实现

​ orm框架: 操作数据库,我们不需要关心链接如何让建立,sql如何执行,只需要引入mybatis,调用方法即可。

继承:继承基类的方法,并做出自己的改变和扩展,子类共性的方法或者属性直接使用父类的

多态:继承 ,方法重写,父类引用指向子类对象

24.重载和重写区别

重载:发生在同一个类中,方法名必须相同,参数类型、个数、顺序不同,方法返回值和访问修饰符可以不同

重写:发生在父子类中,方法名、参数列表必须相同,访问修饰符范围大于等于父类。

2.数据库

1.相关概念

数据库:就是存储和管理数据的仓库。长期存储在计算机中的、有组织的、可共享的、统一管理的大量数据的集合。

分类:现在分为关系型数据库 、非关系型数据库

关系型数据库:底层以二维表的形式保存数据的库。

2.Redis

1.Redis是非关系型、基于内存的数据库,提供键值对形式的数据存储

支持每秒十几万的读写操作,性能远超关系型数据库,支持集群、分布式、主从同步

使用场景:读取缓存用的数据(读操作远大于写操作的数据)如首页; 高速读写场合。

2.1缓存

类别: 浏览器缓存 CDN缓存 网关(代理)缓存 进程内缓存 进程外缓存 数据库缓存

问题: "缓存更新"和"缓存与数据的一致性"问题

缓存雪崩: 大量请求并发进入时,由于某些原因未能起到预期的缓冲效果 ,造成数据库压力过重 解决:加锁排队或者 缓存时间增加随机值

3.连接池

c3p0 DBCP HikariCP Druid

3.JDBC

1.JDBC概述

Java数据库连接 就是利用Java语言连接并访问数据库的一门技术

2.JDBC连接数据库

jdbc中主要包含两个包(java.sql和javax.sql),并且Java中已经包含这两个包了

除jdbc的包之外,我们在操作数据库时还需要导入该数据库对应的驱动包(jar包)

连接数据库6步: 1.注册驱动 2.获取连接 3.获取传输器 4.执行sql语句 5.处理结果 6. 释放资源

如下代码操作:

/* 新增表记录: 往account表中添加一条记录: null 'hellen' 3500 */
@Test
public void testAdd() throws Exception {
	//注册驱动
	Class.forName( "com.mysql.cj.jdbc.Driver" );
	//获取连接
	Connection conn = DriverManager.getConnection( 
		"jdbc:mysql:///jt_db?characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false", 
		"root", "root" );
	//获取传输器
	Statement stat = conn.createStatement();
	//执行SQL语句, 返回执行结果
	String sql = "insert into account value(null, 'hellen', 3500 )";
	int rows = stat.executeUpdate(sql); 
	//处理结果
	System.out.println( "影响的行数为: "+rows );
	//释放资源
	stat.close();
	conn.close();
}

3.JDBC优缺点

1.优点: 相比使用第三方框架连接访问数据库速度要快一些,因为这是最为传统,底层的方法。

2.缺点:包含大量的代码,后期难以维护。

​ 自身没有连接池

​ 查询结果需要开发人员手动处理,如果是非常复杂的数据处理起来是非常麻烦的。

4.连接池

如果使用连接池:
可以在程序一启动之后,就创建一批连接放在一个池中(容器), 当用户需要连接时, 不用自己创建, 而是从连接池中获取一个连接对象, 再基于这个连接对象去访问数据库, 用完连接后, 不用将连接关闭, 而是还回连接池中。这样一来,用户使用的都是池中的这一批连接,可以减少连接创建和关闭的次数,提高程序的执行效率!

5.数据库事务(DataBase Transaction)ACID

原子性: 事务中的sql是一个整体,不能被分割

一致性: 事务执行前后数据之和是保持一致的

隔离性: 在事务并发时,一个事务理论上看不到另外一个事务的状态

持久性: 一旦事务提交就会持久的保存到数据库中

4.Maven

1.介绍

Maven是一个项目管理工具,可以用来管理企业级的Java项目开发及依赖的管理。

使用maven开发 可以简化项目配置,统一项目结构。

依赖: Java项目依赖的一些第三方jar包,比如JDBC程序中要依赖数据库驱动包

依赖管理: 就是对项目中所依赖的jar包进行规范化管理。

2.优势

使用Maven遵循规范开发有利于提高大型团队的开发效率,降低项目的维护成本。

5.MyBatis

1.介绍

MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库过程进行了封装。

简化了JDBC代码

2.占位符

#{} 相当于JDBC中的问号占位符,为SQL语句中的参数值进行占位,参数值为字符串或者日期类型的值时,会进行转义处理(两边加上单引号)。

是 为 S Q L 片 段 ( 字 符 串 ) 进 行 占 位 , 将 传 过 来 的 S Q L 片 段 直 接 拼 接 在 {} 是为SQL片段(字符串)进行占位,将传过来的SQL片段直接拼接在 SQL(),SQL{}占位符所在位置,不会进行转义处理。

#{}带引号,${}不带引号

#{}可以防止SQL注入 一般能用#{} 就不用${}

6.Spring框架

1.介绍

Spring框架是一个简化java企业级应用开发的开源应用程序框架,以IOC和AOP为核心,提供了表现层SpringMVC和持久层SpringJDBC以及业务层事务管理等众多模块的企业级应用技术。

SSM(SpringMVC Spring MyBatis)

Spring本质是管理软件中的对象,,即创建对象和维护对象之间的关系

2.优势

1.通过Spring提供的IOC容器,可以将对象间的依赖关系交由Spring进行控制,方便解耦,简化开发。

2.通过Spring的AOP功能。方便进行面向切面的编程。

3.通过声明式方式灵活的进行事务的管理,提高开发效率和质量。

4.方便程序的测试

5.方便集成各种优秀框架,降低各种框架的使用难度,提高了各种优秀框架的直接支持。

6.降低javaEE API 的使用难度,对API进行了薄薄的封装层。

3.SpringIOC容器

IOC 控制反转: 把创建对象的权力交给框架,通过XML或注解来创建对象。

Spring中把每个需要管理的对象称之为SpringBean(简称Bean),管理Bean的容器称之为SpringIOC容器。

4.BeanFactory接口几个常用方法

/* 根据bean的名称,返回指定bean的一个实例(如果有) */
Object getBean(String name) throws BeansException;
?
/* 根据Bean的类型(也可以是父类或父接口),返回唯一匹配给定对象类型的bean实例(如果有) */
<T> T getBean(Class<T> requiredType) throws BeansException;
?
/* 检索这个Bean工厂是否包含一个给定名称的bean实例  */
boolean containsBean(String name);
?
/* 获取Bean的类型  */
Class<?> getType(String name) throws NoSuchBeanDefinitionException;
?
/* 根据Bean的名称,检索当前Bean是不是单例,如果是则返回true */
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
?
/* 根据Bean的名称,检索当前Bean是不是多例,如果是则返回true */
boolean isPrototype(String name) throws NoSuchBeanDefinitionException;

5.Bean作用范围

在Spring容器中管理的Bean对象的作用域,可以通过scope属性或相关注解指定作用范围。

bean的scope属性常用取值:

1)scope="singleton":单实例(默认值)
2)scope="prototype":多实例

singleton单例:Spring 为每个类只创建一个实例,而且会存入到bean池中。

优点:只创建一个实例,可以节省内存空间,减少资源浪费。

缺点:可能会引发线程安全问题

prototype多例:每次通过Spring容器获取实例时,都会重新创建该类的实例。

优点:不会引发线程安全问题

缺点:每次获取都会创建新的实例,会占用服务器的内存空间,造成资源浪费。

6.Spring Bean的生命周期

1.通过构造器或者工厂方法创建bean实例

2.为bean属性赋值,调用bean的初始化方法

3.使用bean

4.当容器关闭时,调用bean的销毁方法

7. SpringDI依赖注入

set方法注入 构造方法注入

set注入: 在类中提供需要注入成员的set方法。spring框架底层调用set方法为成员变量赋值。

构造注入:使用构造函数,为成员变量赋值。

如果添加有参构造函数,建议同时添加无参构造函数,否则多处抛出异常。

Bean对象的生命周期:单例对象中当spring容器对象创建时,bean对象就会被创建

随着spring容器的销毁而销毁;

多例对象中当获取bean对象时,Spring框架才会为我们创建bean对象,对象在使用过程中会一直存活,当长时间不用且没有别的对象引用时,由java垃圾回收机制负责回收。

8. 切面的五种类型的通知

before: 前置通知,在一个方法执行前被调用

after: 在方法执行之后调用 无论方法执行是否成功

afterReturning: 仅当前方法成功完成后执行通知

afterThrowing:在方法抛出异常退出时执行通知

around: 在方法执行之前和之后调用的通知

9. 转发(forward)和重定向(redirect)

forward:客户端和浏览器执行一次请求,地址不变

redirect:客户端和浏览器执行两次请求,地址改变

10.用到哪些设计模式

1.工厂模式:BeanFactory就是简单工厂模式的体现

2.单例模式: Bean 默认为单例模式

3.代理模式:Spring中AOP功能用到JDK代理和CGLIB代理

4.观察者模式:定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知自动更新。

7.SpringMVC框架

1.简介

SpringMVC是Spring框架的一个模块,是一个基于mvc的web框架。

2.执行原理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vCVX9LVJ-1632628247955)(D:\images\mvc流程.png)]

3.什么是ORM

mvc框架中的重要一部分,实现了数据模型与数据库的解耦

ORM:对象关系映射的简称,将对象和表进行关联

8.Springboot

1.介绍

独立运行,简化配置,自动配置,和无需部署war文件等等(war:一个可以直接运行的web模块)

2.jdk代理和cglib代理

1.JDK代理要求目标对象必须实现接口,代理对象实现同一个接口 目标对象和代理对象之间是兄弟关系

2.CGLib代理不管目标对象是否有接口都可以为其创建代理对象,代理对象继承目标对象,是父子关系

3.什么是跨域请求

违反同源策略,浏览器不能正常解析数据则称为跨域请求

同源策略:Ajax请求的地址必须满足请求协议,请求域名,请求端口和页面的URL地址相同。

4.依赖注入和工厂模式

1.通过依赖注入,类就是POJO,它只知道依赖不关心怎么获取他们

2.工厂模式: 类需要通过工厂获取

5.从浏览器输入url到数据加载完成,整个过程

1.浏览器先查看浏览器缓存,系统缓存,路由缓存,如果有缓存直接显示。如果没有则将域名发送至DNS域名解析器,

将网址解析为ip地址(通过ip找到网络中计算机,通过端口号访问服务器中对应的应用)

2.浏览器基于http协议向服务器发起请求

3.服务器响应请求,分配线程处理请求

4.服务器基于TCP协议,与数据库建立连接,获取数据,响应至浏览器

5.浏览器接收响应,读取页面内容进行页面渲染。

9.前端

1.Vue

Vue是一套用于构建用户界面的渐进式JavaScript框架。

核心库只关注视图层,方便与第三方库或既有 项目整合。

2.基础语法

1.单向绑定数据 v-bind 简写(:)

2.双向绑定数据v-model

3.方法 methods

4.条件指令 v-if v-else v-else-if 切换开销大

v-show 基于css进行切换 需要频繁地切换,则使用v-show较好

5.列表循环指令 v-for v-for="(n, index) in 5"可获取索引

3.组件(component)

组件可以扩展HTML元素,封装可重用的代码

4.js获取DOM元素

1.document.getElementById()

2.document.getElementByName()

3.document.getElementByTagName()

4.document.getElementByClassName()

5.生命周期

beforeCreate 实例被创建出来之前执行

created 执行时,data 和 methods 都已经被初始化好了

beforeMount 数据挂载前执行

mounted 实例被挂载后执行

beforeUpdate 执行时,内存中的数据已更新,但是页面尚未被渲染

updated 执行时,内存中的数据已更新,并且页面已经被渲染

beforeDestroy vue对象销毁前执行

destroyed 实例销毁之后执行

6.路由(router)

Vue.js 路由允许我们通过不同的URL访问不同的内容

可以实现多视图的单页Web应用

Vue.js路由需要载入 vue-router 库

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值