Java基础知识点整理复习

  • Sun公司于1995年正式对外公布Java语言

  • Java语言是面向对象程序的语言

  • Java中,Public修饰时,一个类能被同一个包或不同包的其他类访问

  • Java语言编写的源程序保存时的文件拓展名是java

  • Java语言的类间的继承关系是单继承的

  • Java中,所有类的根源是java.lang.Object

  • 为了区分重载多态中同名的不同方法,要求形式参数个数或者类型不同

  • 在Java中,final classMyclass{}不能派生子类

  • Java的基本数据类型不包括String

  • 用于定义接口的关键字是interface

  • 用interface声明一个接口时,只可以用public修饰接口

  • 接口包括静态常量和抽象方法

  • 用于实现接口的关键字是implements

  • 在Java中,已定义接口B和C,要定义一个实现这两个接口的类,正确的语句:class A implements B,C

  • 定义抽象类的关键字是abstract

  • 定义最终类的关键字是final

  • switch语句是多分支语句

  • 无限循环语句:for(;; ){}

  • 子类某个变量和父类相同时,会隐藏父类同名变量

  • 抽象方法只有方法头,没有方法体

  • 多维数组实际上是一维数组构成的数组的数组

  • Java程序运行的五个步骤:编辑,编译,加载,验证,运行

  • Java语言采用双字节的Unicode字符编码

  • Java语言中创建一个对象使用的关键字为new

  • 自定义异常类的父类可以是Exception

  • 类和对象是一对多的关系

  • Thread类中能运行线程体的方法是setPrority

  • 自定义函数不能实现事件的响应

  • wait()和notify()可以完成线程同步

  • 算法的时间复杂度和空间复杂度没有直接关系

  • 启动线程start()只能调用一次

  • 二分查找法只适用于顺序存储的有序表

  • exists()判断文件是否存在

  • Applet生命周期:init(),start(),stop(),destory()

  • 一个线程只能属于一个进程,而一个进程可以有多个线程

  • HashMap底层是用哈希表实现的,不能保证其中元素顺序

  • 线性链表不受存储空间大小的限制

  • 构造方法没有返回值

  • 数组是固定长度的线性表

  • 一个线程中的数据是具有共享性的,可以被其他线程共享

  • 使线程进入阻塞状态的方法有:sleep()和join()

  • 用于声明同步方法的关键字是synchronized

  • 用于定义线程执行体的方法是run()

  • Java里方法的参数传递方式只有一种:值传递

  • JVM、JRE、JDK之间的关系
    JVM:Java Virtual Machine //Java虚拟机
    JRE:Java runtime environment //Java运行环境
    JDK:Java Development Kit //Java开发工具包
    在这里插入图片描述

  • 有了基本数据类型为什么还要包装类型?
    我们知道Java是一个面向对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型(如我们在使用集合类型Collection时就一定要用包装类型而非基本类型),它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。
    另外,当需要往ArrayList,HashMap中放东西时,像int,double这种基本类型是放不进去的,因为容器都是装object的,这时就需要这些基本类型的包装器类了。

  • 实现一个拷贝文件的工具类使用字符流还是字节流?
    我们拷贝的文件不确定是只包含字符流,有可能有字节流(图片、声音、图像等),为考虑适用性,要使用字节流。

  • ==与equals的区别

  • ==用来判断两个变量之间的值是否相等,变量可以分为基本数据类型和引用类型,如果是基本数据类型的变量直接比值,而引用数据类型要比较对应的应用的内存的首地址。
    equals用来比较两个对象是否长得一样,判断两个对象的某些特征是否一样,因此需要重写equals方法。

  • String、StringBuffer、StringBuilder
    String是内容不可变的字符串,而StringBuffer和StringBulider则是内容可以改变的字符串。String底层使用了一个不可变的字符数组(用final修饰),StringBuffer和StringBuilder底层使用的可变的字符数组(没有使用final来修饰)。
    StringBuffer和StringBuilder都继承自AbstractStringBuilder, StringBuilder是线程不安全的,效率较高,而StringBuffer是线程安全的,效率较低。
    String:适用于少量的字符串操作的情况。
    StringBuffer:适用于单线程下在字符缓冲区进行大量操作的情况。
    StringBulider:适用于多线程在字符缓冲区进行大量操作的情况。

  • 什么是重载方法?
    方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同参数的类型或参数的个数。调用重载方法时,Java编译器能检查调用的方法的参数类型和个数选择一个恰当的方法。

  • break和continue语句的区别?
    使用break语句是跳出循环,并执行循环之后的语句。
    而continue是终止当前循环,并继续执行下次循环。
    break退出循环,continue终止循环,进行下一次循环。

  • throw语句和throws声明有什么区别?
    throw语句可以明确抛出一个异常,throws声明进行抛出异常。

  • ArrayList和LinkedList的区别
    ArrayList底层使用的是数组,LinkedList底层使用的是链表。
    数组查询元素比较快,而插入、删除和修改比较慢(数组在内存中是一块连续的内存,如果删除或插入时需要移动内存)。
    链表不要求内存是连续的,在当前元素中存放上一个或下一个元素的地址,查询需要从头部开始一个一个的找,所以查询效率低,插入时不需要移动内存,只需改变引用指向即可,所以插入或者删除效率较高。

  • Servlet
    servlet全称Java servlet ,是用Java编写的服务器端程序,servlet是指任何实现了servlet接口的类。其主要功能在于交互式地浏览和修改数据,生成动态的web。
    我们通常通过继承HttpServlet重写doGet和doPost方法或重写service方法完成对get和post请求的响应。
    servlet的生命周期:
    加载servlet的class —>实例化servlet —>调用servlet的init方法完成初始化 —>响应请求(servlet的service方法)—>servlet容器关闭(servlet的destory方法)
    servlet API中的forward与redirectde区别:
    1.forward是服务器的转向而redirect是客户端的跳转。
    2.使用forward浏览器的地址不会发生改变,而direct会发生改变。
    3.forward是在一次请求中完成,而redirect是重新发起请求。
    4.forward是在服务器端完成,而不用客户端重新发起请求,效率较高。

  • Jsp和servlet异同
    jsp是servlet技术的扩展,所有的jsp文件都会被翻译为一个继承HttpServlet的类,也就是jsp最终也是一个servlet,这个servlet对外提供服务。
    servlet和jsp最主要的不同点在于,servlet如果要实现html的功能,必须使用write输出对应的html,而jsp是由html和Java组成便于显示视图。

  • jsp的九大内置对象
    1、request对象
    request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。
    2、response对象
    response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。
    3、session对象
    session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。
    4、application对象
    application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。
    5、out 对象
    out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
    6、pageContext 对象
    pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。
    7、config 对象
    config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。
    8、page 对象
    page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。
    9、exception 对象
    exception 对象的作用是显示异常信息,只有在包含 isErrorPage=”true” 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。exception 对象几乎定义了所有异常情况。在Java程序中,可以使用try/catch关键字来处理异常情况; 如果在JSP页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception 对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。

  • jsp的四大作用域
    1.pageContext:页面域
    页面作用域仅限于当前页面对象,可以近似于理解为java的this对象,离开当前JSP页面(无论是redirect还是forward),则pageContext中的所有属性值就会丢失。
    2.request:请求域
    请求作用域是同一个请求之内,在页面跳转时,如果通过forward方式跳转,则forward目标页面仍然可以拿到request中的属性值。如果通过redirect方式进行页面跳转,由于redirect相当于重新发出的请求,此种场景下,request中的属性值会丢失。
    3.session:会话域
    会话作用域是在一个会话的生命周期内,会话失效,则session中的数据也随之丢失。
    4.application: 应用域
    应用作用域是最大的,只要服务器不停止,则application对象就一直存在,并且为所有会话所共享。

  • session与cookie的区别
    session与cookie都是会话跟踪技术,cookie通过在客户端记录信息确定用户身份。但是session的实现依赖于cookie。sessionId(session的唯一标识需要存放在客户端)

  • cookie与session的区别:
    cookie的数据存放在客户端的浏览器上,而session数据存放在服务器上。
    cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应用session。
    session会在一定时间内保存在服务器上,当访问增多时,会比较占用服务器的性能,考虑到减轻服务器的性能方面的压力应用cookie。
    单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie
    所以我们通常把登录信息保存在session,其他需要保存的信息放在cookie

  • Ajax
    Question1:什么是Ajax?
    **Answer1:**Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。异步的javascript和xml。
    Question2:作用?
    Answer2: Ajax通过与服务器进行数据交换,Ajax可以使网页实现布局更新,这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
    Question:怎么实现Ajax?
    Answer3:使用XMLHttpRequest 可以异步向服务器发送请求,获取响应,完成布局更新。
    使用场景:登录失败时不跳转页面,注册时提示用户名是否存在,二级联动等场景使用。

  • 事务
    事务是并发控制的单位,是用户定义的一个操作序列,这些操作要么都做,要么都不做,是一个不可分割的工作单位。
    事务的四大特征:
    原子性:表示事务内操作不可再分割,要么都成功,要么都失败。
    一致性:要么都成功,要么都失败,后面的失败了,要对前面的操作进行回滚。
    隔离性:一个事务开始后,不能受其他事务干扰。
    持久性:表示事务开始了,就不能终止。

  • mysql数据库的默认的最大连接数
    Question:为什么需要最大连接数?
    Answer:特定服务器上的数据库只能支持一定数目同时连接,这时候我们设置最大连接数(最多同时服务多少连接)。在数据库安装时都会有一个最大的连接数。mysql默认的最大连接数是100;

  • JDBC
    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
    Java通过定义接口,让数据库厂商自己实现接口,对于我们开发者而言,只需导入对应厂商开发的实现即可。

  • JDBC中PrepareStatement相比Statement的好处
    大多数情况下我们都使用PrepareStatement
    1.PrepareStatement是预编译的,比Statement速度更快。
    2.代码的可读性增强。
    3.安全性,PrepareStatement可以防止SQL注入攻击。

  • 数据库连接池的作用
    1、资源复用
    由于数据库连接得到重用,避免了频繁创建、释放连接引起的大量性能开销。在减少系统消耗的基础上,另一方面也增进了系统运行环境的平稳性(减少内存碎片以及数据库临时进程/线程的数量)。
    2、更快的系统响应速度
    数据库连接池在初始化过程中,往往已经创建了若干数据库连接至于池中备用。此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接初始化和释放过程的时间,从而缩减了系统整体响应时间。
    3、统一的连接管理,避免数据库连接泄漏在较为完备的数据库连接池实现中,可根据预先的连接占用超时设定,强制收回被占用连接。从而避免了常规数据库连接操作中可能出现的资源泄漏。

  • 数据库优化
    1.查找、定位慢查询、并优化
    2.创建索引:创建合适的索引,我们就可以现在索引中查询,查询到以后直接找对应的记录。
    3.分表 :当一张表的数据比较多或者一张表的某些字段的值比较多并且很少使用时,采用水平分表和垂直分表来优化
    4.读写分离:当一台服务器不能满足需求时,采用读写分离的方式进行集群。
    5.缓存:使用 redis来进行缓存等等

  • redis
    Question1: redis是什么?
    Answer1: redis是一个key-value的mysql数据库,先到内存中根据一定的策略持久化到磁盘,即使断电也不会丢失数据,支持的数据类型比较多。主要用来做缓存数据库的数据和web集群当作中央缓存存放session
    Question2: 简单说一下redis的使用场景?
    Answer2: 首先redis可以用做缓存,把经常需要查询的,很少修改的数据放到读速度很快的空间(内存),以便下次访问减少时间,减轻压力,减少访问时间。其次是计数器,redis中的计数器是原子性的内存操作,可以解决库存溢出问题,进销存系统内存溢出。redis还可作为session缓存服务器,web集群时作为session缓存服务器。

  • redis存储对象的方式
    JSON字符串:需要把对象转换为json字符串,当做字符串处理,直接使用set、get来设置或者获取。优点:设置和获取比较简单。缺点:没有提供专门的方法,需要把对象转换为json(jsonlib)
    字节:需要做序列化,就是把对象序列化为字节保存
    如果担心json转对象比较消耗资源的情况,这个问题需要考虑几个方面:
    1.就是使用的json转换lib是否存在性能问题
    2.即使数据的数量级别,如果是存储百万级别的大数据对象,建议采用存储序列化对象方式,如果少量的数据级对象。或者是数据对象字段不多,还是建议采用json准还成String的方式

  • redis数据淘汰机制
    Question: 为什么要淘汰?
    Answer: 内存有限,需要保存有效的数据。
    volatile-lru:使用LRU算法进行数据淘汰(淘汰上次使用时间最早的,且使用次数最少的key),只淘汰设定了有效期的key
    allkeys-lru:使用LRU算法进行数据淘汰,所有的key都可以被淘汰
    volatile-random:随机淘汰数据,只淘汰设定了有效期的key
    allkeys-random:随机淘汰数据,所有的key都可以被淘汰
    volatile-ttl:淘汰剩余有效期最短的key

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值