• 记忆


    一 Java基础

    1、JDK 和 JRE 有什么区别?

    JRE:Java运行时环境,包含了Java虚拟机、Java基础类库
    JDK:Java开发工具包,它包含了JRE,编译器和其他工具

    1. 如果需要运行java程序,只需要安装JRE就可以了。
    2. 如果需要编写java程序,需要安装JDK
    3. JAVA_HOME > JDK的安装目录

    2、== 和 equals 的区别是什么?

    ==比较的是地址
    equals 比较的是 两个对象的内容

    3、两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

    是相同,因为 equals() 比较的是两个对象的内容,hashCode相同说明值相同

    4、final 在 java 中有什么作用?

    final可以修饰类,这样的类不能被继承,比如String类
    final可以修饰方法,这样的方法不能被重写
    final可以修饰变量,这样的变量的值不能被修改

    5、java 中的 Math.round( 1.5) 等于多少?

    1
    Math.round() 的返回值类型是long
    Math.round(11.5f),那它的返回值类型是int,取值向正无穷方向取舍
    Math.round(11.5) > 12
    Math.round( 11.5) > 11
    Math.round(0.5) > 1
    Math.round( 0.5) > 0

    6、String 属于基础的数据类型吗?

    String 是引用类型
    基础的数据类型有:byte、short、int、long、Boolean、double、float、char

    7、基础类型与引用类型的区别:

    基础类型只表示简单的字符或数字
    引用类型可以是任何复杂的数据结构

    8、java 中操作字符串都有哪些类?它们之间有什么区别?

    String
    一旦被创建,就不能修改它的值
    适用于少量的字符串操作的情况
    StringBuffer
    StringBuffer是线程安全的
    StringBuilder
    StringBuilder是线程不安全的
    运行速度比StringBuffer快

    9、String str="i"与 String str=new String("i")一样吗?

    不一样
    String str = 'i' 先去内存中找是否存在 ’i‘ 这个字符串,若是存在,则将地址引用,不存在则创建。
    String str = new String('i'),不管事先是否存在’i‘ 每次都会创建其新的对象

    10、如何将字符串反转

    调用StringBuffer类中的reverse方法


    String str = "abc";
    StringBuffer sb = new StringBuffer(str);
    System.out.println(sb.reverse());

    通过charAt(int index)返回char值进行字符串拼接

    java
    String str = "abc";
    String reverse = "";
    for (int i = 0; i <str.length() ; i++) {
    reverse = +str.charAt(i) + reverse ;
    }

    11、String 类的常用方法都有那些?

    length
    charAt
    substring
    concat
    indexOf
    toLowerCase
    toUpperCase
    replace
    trim
    split
    ......

    12、抽象类必须要有抽象方法吗?

    抽象类可以没有抽象方法
    抽象方法不能声明为静态
    如果一个类中有了一个抽象方法,那么这个类必须声明为抽象类,否则编译不通过

    13、普通类和抽象类有哪些区别?

    抽象类不能被实例化
    抽象方法不能被声明为静态

    14、抽象类能使用 final 修饰吗?

    不能
    抽象类所抽取的我们关注的共同特征所形成的基类,如果不能继承这个抽象类将是无意义的


    15、接口和抽象类有什么区别?

    抽象类使用 abstract 关键字 继承
    接口使用 implements 关键字 实现
    接口中不能有方法体
    抽象类中可以有方法体
    抽象类可以继承一个类实现多个接口
    接口只可以继承一个或多个其他接口
    抽象类中添加新方法,只需提供默认的实现,不需要改变你现在的代码
    接口中添加新方法,那你必须改变实现该接口的类
    抽象类除了不能被实例化,和普通Java类没有区别
    接口是完全不同的类型

    16、java 中 IO 流分为几种?

    按流向分
    输入流
    输出流
    按类型分
    字节流
    字符流

    17、BIO、NIO、AIO 有什么区别?

    BIO
    同步阻塞
    第一次请求还没有结束的话,后面的请求就一直等待
    NIO
    同步非阻塞
    将每一个请求分配给一个线程来单独处理
    AIO
    异步非阻塞

    18、File的常用方法都有哪些?

    createNewFile 指定位置创建一个空文件,成功就返回true,如果已存在就不创建,然后返回false。
    mkdir 指定位置创建一个单级文件夹。
    mkdirs 指定位置创建一个多级文件夹。
    delete 删除文件或者一个空文件夹,不能删除非空文件夹,马上删除文件,返回一个布尔值
    exists 文件或文件夹是否存在。
    isFile 是否是一个文件,如果不存在,则始终为false
    getName 获取文件或文件夹的名称,不包含上级路径。
    getAbsolutePath 获取文件的绝对路径,与文件是否存在没关系
    getParent 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null

    19、java有多个访问修饰符?各有什么含义?

    public 公开的 任何一个类都可以访问
    private 私有的 只能在本类访问
    default 默认的 只能被同一个包中类访问
    protected 受保护的 同包和继承的类可以访问

    20、什么是继承?

    继承是面向对象实现软件复用的重要手段,当子类继承父类,可直接或者间接获取父类里的成员

    21、什么是封装?

    封装是指将对象的实现细节隐藏起来,通过公共方法暴露出该对象的功能

    22、什么是多态?

    多态指的是同一行为具有多个不同表现形态和状态的能力

    23、方法重载与重写有什么区别?

    重写(Override)发生在继承中
    方法名称、参数类型、返回值类型全部相同
    重载(Overload)发生在一类中
    方法名相同、参数的类型或个数不同

    24、抽象类与接口 相同与不同之处? 他们分别什么时候使用?

    相同处:

    不能直接实例化
    抽象类里的[抽象方法](https://www.baidu.com/s?wd=%E6%8A%BD%E8%B1%A1%E6%96%B9%E6%B3%95&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)必须全部被子类所实现,子类不能全部实现父类[抽象方法](https://www.baidu.com/s?wd=%E6%8A%BD%E8%B1%A1%E6%96%B9%E6%B3%95&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao),那么该子类还只能是抽象类。一个类实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。

    不相同处:

    子类需要使用extends关键字来继承抽象类
    接口子类使用implements来实现接口
    抽象类可以有构造器,接口不能有构造器
    抽象类除了不能实例化之外和普通的java类没有区别
    接口是完全不同的类型

    如果想实现多重继承,则使用接口

    如果基本功能在不断改变,则使用抽象类

    25、什么是类?

    类是一个模板,它描述着一类对象的行为和状态

    26、什么是对象?

    对象是类的一个实例,有状态、行为,客观存在的事物都可以成为对象(万物皆对象)

    27、构造函数的作用是什么?

    对类进行初始化

    28、局部变量 实例变量 类变量 全局变量

    局部变量
    在方法或者代码块中,或者方法的声明上(即在参数列表中)
    实例变量
    在类的声明中,属性是使用变量来表示的。称为实例变量
    类变量(静态变量)
    独立于方法之外的变量
    全局变量
    在函数外部定义的变量 称为全局变量

    29、Java是什么?

    Java是一门面向对象编程语言
    Java的优点
    简单、安全、稳定、跨平台
    Java缺点
    需要运行环境、不合适开发桌面应用程序

    30、Java的特性是什么?

    封装

    将对象的实现细节隐藏起来,通过公共方法暴露出该对象的功能

    继承

    继承是面向对象实现软件复用的重要手段,当子类继承父类后,可直接或间接获取父类里的成员

    多态

    同一行为具有多个表现形式和状态的能力

    抽象

    +是指定从特定的角度出发,从已存在的一些事物中抽取我们所关注的特性、行为从而成一个新事物的思想过程

    容器

    1、java 容器都有哪些?

    数组、String、java.util下的集合容器

    反射

    1、什么是反射?

    指程序可以访问、检测和修改它本身状态或行为的一种能力

    2、什么是 java序列化?

    序列化:把Java对象转换为字节序列的方法

    3、什么情况下需要序列化?

    把对象的字节序列化到永久的保存到硬盘中
    在网络上传递对象的字节序列

    4、动态代理是什么?有哪些应用?

    动态代理 指的是 可以任意控制任意对象的执行过程
    本来应该[自己做](https://www.baidu.com/s?wd=%E8%87%AA%E5%B7%B1%E5%81%9A&tn=24004469_oem_dg&rsv_dl=gh_pl_sl_csd)的事情,因为没有某种原因不能直接做,只能请别人代理做。被请的人就是代理
    比如春节买票回家,由于没有时间,只能找票务中介来买,这就是代理模式。
    应用: Spring的AOP

    5、怎么实现动态代理

    jdk动态代理
    cglib动态代理

    MySQL

    1、自定义函数

    sql
    函数 > 模块化,封装,代码复用

    create function 函数名([参数列表]) returns 数据类型
    begin
    SQL语句;
    return 值;
    end;

    示例:
    最简单的仅有一条sql的函数
    create function myselect1() returns int return 666;
    调用
    select myselect1();

    带传参的函数
    create function mysql(name varchar(15)) returns int
    begin
    return (select id from table_name where column_name = name);
    end;
    调用
    select mysql("张三");

    2、存储过程

    sql
    存储过程 > 一组为了完成特定功能的SQL语句集

    IN 传入参数
    delimiter //
    create procedure mysql (
    IN id int
    )
    begin
    select * from table_name where id = id;
    end;
    //
    delimiter;

    其中in是传进去的变量;
    drop procedure mysql;//销毁这个存储过程
    调用存储过程
    call mysql(1);

    OUT 输出参数
    delimiter //
    create procedure demo
    (in id1 int,OUT ids int)
    begin
    select id into ids from users where id = id1;
    select ids;
    end
    //
    delimiter ;

    调用
    set @result;
    call demo(1,@result);

    INOUT输入输出
    delimiter //
    create procedure demo (inout ids int)
    begin
    select id into ids from users where id =ids;
    select ids;
    end
    //
    delimiter ;

    调用
    set @result1 =2;
    call demo(@result1);

    3、视图

    sql
    视图就是一条select 语句 执行后返回结果集,是一种虚拟表,是一个逻辑表
    方便操作,减少复杂的SQL语句,增加可读性,更加安全一些
    create view demo_view
    as
    select u.id,u.name,n.stuNo from users u inner join number n on u.stuId=n.id;

    调用
    select * from demo_view;
    删除
    drop view demo_view;

    4、索引

    sql
    索引分类?
    1、普通索引 2、唯一索引 3、全文索引 4、组合索引

    普通索引:仅加速查询,最基本的索引,没有任何限制

    唯一索引:加速查询 + 列值唯一(可以有null)

    全文索引:仅适用于MyISAM引擎的数据表,作用于char、varchar、text数据类型的列

    组合索引:将几个列作为一条索引进行检索,使用最左匹配原则

    索引用于快速找出在某个列中有一特定值的行,不使用,MySQL必须从第一条记录开始读完整个表

    优点
    1、所有的MySQL列类型(字段类型)都可以被索引,也就是可以给任意字段设置索引
    2、大大加速数据的查询速度
    缺点
    1、创建索引和维护索引要耗费时间
    2、对表的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度

    create table healerjean (
    id int AUTO_INCREMENT PRIMARY KEY COMMENT '主键',
    name VARCHAR(32) NOT NULL COMMENT '姓名',
    email VARCHAR(64) NOT NULL COMMENT '邮箱',
    message text DEFAULT NULL COMMENT '个人信息'
    INDEX index_name (name) COMMENT '索引name'
    ) COMMENT = '索引测试表';
    给已创建的表 添加索引
    create index index_name on healerjean(name);
    删除索引
    drop index index_name on healerjean;

    5、触发器

    sql
    监视某种情况,并触发某种操作

    触发器创建语法四要素
    1、监视地点
    2、监视事件
    3、触发时间
    4、触发事件

    触发器只能创建在永久表上,不能对临时表创建触发器

    create trigger 触发器名称
    after/before insert/update/delete on 表名
    for each row 这句话在mysql是固定的
    begin
    sql语句;
    end;

    示例:
    delimiter //
    create trigger trigger_demo before insert on demo1
    for each row
    begin
    insert into demo1(name) values('触发器修改啦...');
    end
    //
    delimiter ;

    删除触发器
    drop trigger trigger_demo;

    SQL Server 中 Order by 排序

    select * from 表名 order by 字段名 (升序)
    select * from 表名 order by 字段名 desc (降序)

    SQL Server 与 MySQL 简单分页查询

    sql server : select top 10 * from 表名
    sql server: select * from 表名 order by 字段名 offset 10 rows Fetch next 10 rows only
    mysql : select * from 表名 limit 页数,条数

    SQL查询语法

    select * from a inner join b on a.id=b.aId; (内连接)
    select * from a left join b on a.id = b.aId;(左连接)
    select * from a right join b on a.id = b.aId;(右连接)
    (select * from a left join b on a.id = b.aId) union (select * from a right join b on a.id = b.aId);(全连接)

    行列转换

    sql
    create table t_score
    (
    name varchar(20) ,
    subject varchar(20),
    score float
    )default charset=utf8;

    INSERT INTO t_score VALUES
    ('王海', '语文', '86'),
    ('王海', '数学', '83'),
    ('王海', '英语', '93'),
    ('陶俊', '语文', '88'),
    ('陶俊', '数学', '84'),
    ('陶俊', '英语', '94'),
    ('刘可', '语文', '80'),
    ('刘可', '数学', '86'),
    ('刘可', '英语', '88'),
    ('李春', '语文', '89'),
    ('李春', '数学', '80'),
    ('李春', '英语', '87');

    要求实现的效果:

    ![](https://img2018.cnblogs.com/blog/1443576/201809/1443576 20180920100429317 1683992356.png)

    sql
    select name,
    max(case subject when '语文' then score end) as 语文 ,
    max(case subject when '数学' then score end) as 数学,
    max(case subject when '英语' then score end) as 英语,
    sum(score) 成绩
    from t_score group by name
    union all
    select 'TOTAL',
    sum(case subject when '语文' then score end),
    sum(case subject when '数学' then score end),
    sum(case subject when '英语' then score end),
    sum(score)
    from t_score;

    2、求出每科每门成绩大于等于80分的人名字

    sql
    select * from t_score group by name having min(score) >=80;

    多线程

    1、什么是线程?

    线程有时被称为经量级进程,是程序执行流的最小单位
    线程是CPU调度的一个基本单位

    2、什么是进程?

    进程是系统中正在运行的一个程序,程序一旦运行就是进程

    3、什么是多线程?

    多线程是指从软件或者硬件上实现多个线程并发执行的技术

    4、并行 和 并发的区别?

    并行:是两个任务同时运行(需要多核CPU)
    比如我跟两个网友聊天,左手操作一个电脑跟甲聊,同时右手用另一台电脑跟乙聊天
    并发:指两个任务都请求运行,而处理器只能接受一个任务,就把这个两个任务安排轮流进行。
    如果用一台电脑我先给甲发个消息,然后立刻再给乙发消息,然后再跟甲聊,再跟乙聊。

    5、进程和线程的区别?

    地址空间:同一进程的线程共享本进程的地址空间,进程之间则是独立的地址空间
    资源拥有:同一进程内的线程共享本进程的资源,进程之间的资源是独立的
    一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉,多进程要比多线程健壮
    线程是处理器调度的基本单位,进程不是

    6、创建线程几种方式?

    继承 Thread 类
    实现 Runnable 接口
    实现Callable 接口


    7、什么是守护线程?

    守护线程是个服务线程,服务于其他线程
    典型案例:垃圾回收线程

    8、什么是用户线程?

    用户线程就是应用程序里的自定义线程

    9、线程有哪些状态?

    新建状态
    就绪状态
    运行状态
    阻塞状态
    死亡状态

    10、sleep() 方法 和 wait() 有什么区别?

    sleep() 可以在任何地方使用
    wait() 只能在同步方法或同步块中使用

    11、notify 和 notifyAll 有什么区别?

    notify是唤醒某个线程
    notifyAll是唤醒所有暂停线程

    12、线程的 run()和 start()有什么区别?

    run() 相当于线程的任务处理逻辑的入口方法
    start() 的作用是启动相应的线程

    13、ThreadLocal 是什么?有哪些使用场景?

    ThreadLocal用于保存某个线程共享变量
    使用场景:解决数据库连接,Session管理

    Java Web

    1、jsp 和 servlet 有什么区别?

    jsp经编译后就成了Servlet(Jsp的本质就是Servlet,JVM只能识别Java类,不能识别Jsp代码,Web容器将Jsp的代码编译成JVM能够识别的java类)
    jsp更擅长表现于页面显示,servlet更擅长于逻辑控制
    Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到。

    2、session 和 cookie 有什么区别?

    cookie 以文本格式存储在浏览器上,存储量有限
    session存储在服务端,可以无限量存储多个变量并且比cookie更安全

    异常

    1、throw 和 throws 的区别?

    throw则是指抛出的一个具体异常类型
    throws是用来声明一个方法可能抛出的所有异常信息

    2、异常是什么?

    异常是一个在程序执行期间发生的事件,它中断正在执行的程序的正常指令流

    3、异常处理的几个关键字有哪些?

    try、catch、finally、throw、throws

    4、运行时异常都是什么异常类型的子类?

    RuntimeException异常类

    5、检查异常是什么?

    简单来说,你代码还没有运行,编码器就会检查你的代码,对可能出现的异常必须做出相对的处理

    6、有哪些常见的检查异常?

    除了 RuntimeException与其子类,以及错误(Error).其他的差不多都是检查异常

    7、异常传播

    这个从异常抛出到控制转移给合适的异常处理语句的过程就叫做异常传播

    8、final、finally、finalize 有什么区别?

    final 用来修饰类、方法、变量
    finally 只能用在 try catch 语法中,表示这段语句最终一定会被执行

    9、try catch finally 中哪个部分可以省略?

    catch和finally语句不能同时省略

    网络

    1、http 响应码 301 和 302 代表的是什么?有什么区别?

    301表示网页永久性转移到另一个地址
    302表示临时性转移
    区别
    301是永久的重定向,搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的网址
    302重定向是临时的重定向,搜索引擎抓取新的内容而保留旧的网址

    2、forward 和 redirect 的区别?

    forward是服务器内部重定向
    redirect是服务器收到请求后发送一个状态头给客户,客户将再请求一次

    3、get 和 post 请求有哪些区别?

    get请求的参数包含在URL中
    post请求参数是放在请求body中
    get请求传参有长度限制,post请求没有长度限制
    get请求的参数只能是ASCII码,post请求传参没有这个限制

    4、如何实现跨域?

    使用CORS技术
    使用JSONP

    5、什么是json?

    json是一种经量级的数据交换格式

    归途(LC)

  • 相关阅读:
    Redis 记录
    flink 流控机制详解
    备份和快照的区别
    LVS 总结
    Keepalived 总结
    OpenResty 总结
    Lua 总结
    Element-UI 总结
    Java transient 关键字
    Activiti 框架
  • 原文地址:https://www.cnblogs.com/ldl326308/p/10518989.html
Copyright © 2020-2023  润新知