网站建设打造营销型网站,浏览器显示不安全网站建设,网站建设过程中的需求分析,期末作业网页设计哈喽~大家好#xff0c;这篇来看看Java 某厂面试题真题合集。 #x1f947;个人主页#xff1a;个人主页 #x1f948; 系列专栏#xff1a;【日常学习上的分享】 #x1f949;与这篇相关的文章#xff1a; Spr… 哈喽~大家好这篇来看看Java 某厂面试题真题合集。 个人主页个人主页 系列专栏【日常学习上的分享】 与这篇相关的文章 SpringCloud Sentinel 使用SpringCloud Sentinel 使用_程序猿追的博客-CSDN博客_springcloud使用sentinel将Nacos注册到springboot使用以及Feign实现服务调用将Nacos注册到springboot使用以及Feign实现服务调用_程序猿追的博客-CSDN博客_nacos springboot 服务调用微服务介绍与 SpringCloud Eureka微服务介绍与 SpringCloud Eureka_程序猿追的博客-CSDN博客目录
一、session和cookie的区别
二、mysql事务怎么用
三、Oracle的如何分组去重
四、Java 数据类型有哪些
五、Java 集合有哪些
六、Java运算符有哪些
七、SQL 查询分组函数过滤去重内联外联查询子查询视图索引
八、视图是什么
九、面向对象特性
十、Java作用域访问权限
十一、JAVA程序分支结构
十二、break和continue
十三、error和exception区别
十四、ioc
十五、如何清理Tomcat缓存
十六、mybatis缓存
十七、session生命周期
十八、mysql分页查询
十九、空指针产生条件
二十、三大范式
二一、工厂模式
二二、Get 和 Post 的区别
二三、九种内置对象
二四、线程锁synchronized和lock区别
二五、线程的生命周期
二六、servlet生命周期
二七、并发和并行的区别
二八、为什么现在大多数网站使用html/htm很少使用jsp
二九、其他 一、session和cookie的区别
1、保存的位置不同 cookie保存在浏览器端session保存在服务端。
2、使用方式不同 cookie如果在浏览器端对cookie进行设置对应的时间则cookie保存在本地硬盘中此时如果没有过期则就可以使用如果过期则就删除。如果没有对cookie设置时间则默认关闭浏览器则cookie就会删除。 session我们在请求中如果发送的请求中存在sessionId则就会找到对应的session对象如果不存在sessionId,则在服务器端就会创建一个session对象并且将sessionId返回给浏览器可以将其放到cookie中进行传输如果浏览器不支持cookie则应该将其通过encodeURL(sessionID)进行调用然后放到url中。
3、存储内容不同cookie只能存储字符串而session存储结构类似于hashtable的结构可以存放任何类型。
4、存储大小cookie最多可以存放4k大小的内容session则没有限制。
5、session的安全性要高于cooKie
6、cookie的session的应用场景cookie可以用来保存用户的登陆信息如果删除cookie则下一次用户仍需要重新登录 session就类似于我们拿到钥匙去开锁拿到的就是我们个人的信息一般我们可以在session中存放个人的信息或者购物车的信息。
7、session和cookie的弊端cookie的大小受限制cookie不安全如果用户禁用cookie则无法使用cookie。如果过多的依赖session当很多用户同时登陆的时候此时服务器压力过大。sessionId存放在cookie中此时如果对于一些浏览器不支持cookie此时还需要改写代码将sessionID放到url中也是不安全。
二、mysql事务怎么用
MySQL事务主要用于处理操作量大、复杂度高的数据。比如在人员管理系统中删除一个人员你既需要删除人员的基本资料也需要删除和该人员相关的信息这样这些数据库操作语句就构成一个事务。InnoDB数据引擎的数据库才支持事务。
事务处理可以用来维护数据库的完整性保证成批的sql语句要么全部执行要么全部不执行。事务用来处理insert、update、delete语句。
事务使用两种方法实现
1用begin、rollback、commit来实现。
Begin开始一个事务。
Rollback事务回滚。
Commit事务提交确认。
2直接用set来改变MySQL的自动提交模式。
Set autocommit0禁止自动提交。
Set autocommit1开启自动提交。 一般来说事务是必须满足4个条件ACID原子性Atomicity或称不可分割性、一致性Consistency、隔离性Isolation又称独立性、持久性Durability。 原子性一个事务transaction中的所有操作要么全部完成要么全部不完成不会结束在中间某个环节。事务在执行过程中发生错误会被回滚Rollback到事务开始前的状态就像这个事务从来没有执行过一样。 一致性在事务开始之前和事务结束以后数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。 隔离性数据库允许多个并发事务同时对其数据进行读写和修改的能力隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别包括读未提交Read uncommitted、读提交read committed、可重复读repeatable read和串行化Serializable。 持久性事务处理结束后对数据的修改就是永久的即便系统故障也不会丢失。 三、Oracle的如何分组去重
示例
表数据 筛选出重复的数据
select name from TEST group by name having count(*) 1 算出有多少个数量为1的数据不重复的将这些数据不做删除
select min(id) from TEST group by name having count(*)1
上面的筛选出重复的数据 作为删除条件
delete from TEST a where (a.name) in
(select name from TEST group by name having count(*) 1)
and id not in (select min(id) from TEST group by name having count(*)1) 四、Java 数据类型有哪些
Java的基本数据类型有8种分别是byte位、short短整数、int整数、long长整数、float单精度、double双精度、char字符和boolean布尔值。 五、Java 集合有哪些
Java API中所用的集合类都是实现了Collection接口他的一个类继承结构如下
Collection–List–VectorCollection–List–ArrayListCollection–List–LinkedListCollection–Set–HashSetCollection–Set–HashSet–LinkedHashSetCollection–Set–SortedSet–TreeSet Vector
1 底层数据结构是数组查询快增删慢
2线程安全效率低
基于Array的List其实就是封装了Array所不具备的一些功能方便我们使用它不可能走入Array的限制。性能也就不可能超越Array。所以在可能的情况下我们要多运用Array。另外很重要的一点就是Vector“sychronized”的这个也是Vector和ArrayList的唯一的区别。
ArrayList
1.底层数据结构是数组查找快增删慢。
2. 线程不安全效率高
同Vector一样是一个基于Array上的链表但是不同的是ArrayList不是同步的。所以在性能上要比Vector优越一些但是当运行到多线程环境中时可需要自己在管理线程的同步问题。
LinkedList
1 底层数据结构是链表查询慢增删快
2线程不安全效率高
LinkedList不同于前面两种List它不是基于Array的所以不受Array性能的限制。它每一个节点Node都包含两方面的内容 节点本身的数据data 下一个节点的信息nextNode。所以当对LinkedList做添加删除动作的时候就不用像基于Array的List一样必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了。这就是LinkedList的优势。
Hashset集合
1 底层数据结构是哈希表哈希表依赖两个方法hascode ()和equals方法
2两个方法的执行顺序
首先判断hascode()值是否相同
是继续执行equals()方法看其返回值
是true说明元素重复不添加
是false就直接添加元素
否就直接添加到集合
Treeset集合
1底层数据结构是二叉树
总结 所有的List中只能容纳单个不同类型的对象组成的表而不是KeyValue键值对。例如[ tom,1,c ] 所有的List中可以有相同的元素例如Vector中可以有 [ tom,koo,too,koo ] 所有的List中可以有null元素例如[ tom,null,1 ] 基于Array的ListVectorArrayList适合查询而LinkedList链表适合添加删除操作。
HashSet虽然Set同List都实现了Collection接口但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是Set则是在HashMap的基础上来实现的这个就是Set和List的根本区别。HashSet的存储方式是把HashMap中的Key作为Set的对应存储项。 六、Java运算符有哪些
1、算术运算符 2、赋值运算符 3、比较运算符 4、逻辑运算符 5、三目运算符 6、位运算
具体使用自行百度 七、SQL 查询分组函数过滤去重内联外联查询子查询视图索引
查询select
分组group by
函数summaxminavg等
过滤上面有讲
内连接inner join
左外连接left join
右外连接right join
全连接full join
联合(合并)查询union
具体作用后面数据库篇会做具体讲解
子查询是嵌套在另一个语句如selectinsertupdate、delete中的查询就像上面的分组去重一样
八、视图是什么
从SQL的角度来看视图就是一张表存在表名、字段列。在SQL语句中也并不区分实体表和视图。
视图和实体表的区别就在与是否保存了实际数据。
视图本身是一个不含任何数据的虚拟表数据库中存放视图的定义保存好的SELECT语句而不存放视图对应的数据。
实体表中保存实际数据使用实体表创建视图后实体表中的数据发生变化视图查询出的数据就会发生变化。
从视图中读取数据时视图会在内部执行对应的SELECT语句并创建出一张临时表。
索引
SQL 索引Index用于提高数据表的查询速度。一个表可以创建多个索引一个索引可以包含一个或者多个字段。
不使用索引数据库引擎将遍历整个表。 九、面向对象特性
面向对象的特征是
1、“抽象”把现实世界中的某一类东西提取出来用程序代码表示
2、“封装”把过程和数据包围起来对数据的访问只能通过已定义的界面
3、“继承”一种联结类的层次模型
4、“多态”允许不同类的对象对同一消息做出响应。 十、Java作用域访问权限
访问权限控制 指的是本类及本类内部的成员成员变量、成员方法、内部类对其他类的可见性即这些内容是否允许其他类访问。
Java 中一共有四种访问权限控制其权限控制的大小情况是这样的public protected default(包访问权限) private ,具体的权限控制看下面表格列所指定的类是否有权限允许访问行的权限控制下的内容 1、public 所修饰的类、变量、方法在内外包均具有访问权限 2、protected 这种权限是为继承而设计的protected所修饰的成员对所有子类是可访问的但只对同包的类是可访问的对外包的非子类是不可以访问 3、包访问权限default 只对同包的类具有访问的权限外包的所有类都不能访问 4、private 私有的权限只对本类的方法可以使用 十一、JAVA程序分支结构
Java程序中, 有3个基本结构: 顺序结构/分支结构/循环结构
十二、break和continue
1 break用于完全结束一个循环跳出循环体执行循环后面的语句。
2 continue是跳过当次循环中剩下的语句执行下一次循环。9.equal和的区别
十三、error和exception区别
一、含义不同
Error类一般是与虚拟机相关的问题如系统崩溃虚拟机错误内存空间不足方法调用栈溢等。对于这类错误的导致的应用程序中断仅靠程序本身无法恢复和和预防遇到这样的错误建议让程序终止。
Exception类表示程序可以处理的异常可以捕获且可能恢复。遇到这类异常应该尽可能处理异常使程序恢复运行而不应该随意终止异常。
二、用途不同
Exception和Error体现了Java平台设计者对不同异常情况的分类。Exception是程序正常运行中可以预料的意外情况可能并且应该被捕获进行相应处理。
Error是指在正常情况下不大可能出现的情况绝大部分的Error都会导致程序处于非正常的、不可恢复状态。既然是非正常情况所以不便于也不需要捕获常见的比如OutOfMemoryError之类都是Error的子类。 十四、ioc
见【JAVAEE框架】浅谈 Spring 框架的两大核心思想 AOP 与 IOP_aop iop_程序猿追的博客-CSDN博客 这篇有具体讲解
十五、如何清理Tomcat缓存
1:关闭tomcat服务
进入到tomcat/bin目录下,执行 ./shutdown.sh 2:查看进程,tomcat是否关闭
ps -aux | grep tomcat
3:如果没有关闭,杀死进程
kill -9 #pid 来彻底关闭tomcat#pid是tomcat的进程ID
4:进入到tomcat/work目录
执行rm -rf Catalina 来删除缓存文件
最后进入tomcat/work目录下执行rm -rf Catalina 来删除缓存文件
执行ls 确认是否删除如果work目录下没有Catalina文件夹说明删除成功。
5:重新启动tomcat
十六、mybatis缓存
这篇有所介绍【JAVAEE框架】Spring 项目构建流程_java spring项目_程序猿追的博客-CSDN博客 十七、session生命周期
session的生命周期分为创建session与销毁session
创建session是指当用户第一次访问jsp页面时因为jsp页面内置了session对象或Sessinon在用户访问第一次访问服务器时创建需要注意只有访问JSP、Servlet等程序时才会创建Session。 只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。 第一次是指浏览器访问服务器时不带值为sessionId的cookie 销毁session只有这两种情况 a.当session有效期到期默认为30分钟可手动设置 b.手动销毁session用session.invalidate(); 情景先第一次访问了服务器的index.jsp页面此时服务器创建一个session并将它的id值存入一个cookie中响应给服务器。然后将浏览器关闭重开再次访问index.jsp 第一次访问index.jsp服务器会将这个session存入服务器内存。关闭浏览器再次访问服务器会再给浏览器一个新的session这是由于浏览器刚开之前接受到的存有sessionId的cookie被清除了再次访问浏览器时又处于了第一次访问的状态。但是之前的session即第一个访问时创建的并没有被销毁而是保存在服务器内存中直到有效期到了或手动销毁。
从上述表述可知第一次访问服务器是指访问服务器时没有携带带有sessionId的cookie或从服务器端理解是没有对应访问用户的session 十八、mysql分页查询
分页查询公式
通过以上三个案例我们可以总结出分页查询公式 (当前页数-1) * 每页条数每页条数
SELECT FROM TABLE LIMIT (Page - 1) * PageSize, PageSize ; 十九、空指针产生条件 当对象为null时调用了其成员方法或属性。 在使用equals()比较两个对象是否相等时当双方是一个常量和一个变量把变量放在常量前且当变量为空的时候运行时会报错。
System.out.println(“abc”.equals(str5)); // 推荐false
System.out.println(str5.equals(“abc”)); // 不推荐报错空指针异常NullPointerException 对key、value不能为null的容器put为null的key、value值。 自己搞的一个集合当集合为空时对其遍历会报空指针异常。PS**若使用mybatis做查询返回集合时当没查到数据时返回的集合不是空而是一个size为0的集合。对其遍历不会报空指针异常。**
二十、三大范式
目前关系数据库有六种范式第一范式1NF、第二范式2NF、第三范式3NF、巴斯-科德范式BCNF、第四范式(4NF和第五范式5NF又称完美范式。
其中最常使用的是第一范式1NF、第二范式2NF、第三范式3NF也就是所谓的三大范式
第一范式1NF要求数据库表的每一列都是不可分割的原子数据项。
第二范式2NF在1NF的基础上非码属性必须完全依赖于候选码在1NF基础上消除非主属性对主码的部分函数依赖
第二范式需要确保数据库表中的每一列都和主键相关而不能只与主键的某一部分相关主要针对联合主键而言。
2NF是对记录的唯一性要求记录有唯一标识即实体的唯一性即不存在部分依赖
第三范式3NF在2NF基础上任何非主属性不依赖于其它非主属性在2NF基础上消除传递依赖
第三范式需要确保数据表中的每一列数据都和主键直接相关而不能间接相关。
3NF是对字段的冗余性要求任何字段不能由其他字段派生出来它要求字段没有冗余即不存在传递依赖 二一、工厂模式
简单工厂模式
1简单工厂模式时属于创建型模式是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式 2简单工厂模式定义了一个创建对象的类由这个类来封装实例化对象的行为代码 3在软件开发中当我们会用到大量的创建某种某类或者某批对象时就会使用到工厂模式
工厂模式
定义了一个创建对象的抽象方法有子类决定要实例化的类。工厂方发模式将对象的实例化推迟到子类
抽象工厂模式
1定义了一个interface 用于创建相关或有依赖关系的对象簇而无需指明具体的类 2抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合 3从设计层面看抽象工厂模式就是对简单工厂模式的改进或称为进一步的抽象。 二二、Get 和 Post 的区别
POST和GET都是向服务器提交数据并且都会从服务器获取数据。
区别 1、传送方式get通过地址栏传输post通过报文传输。 2、传送长度get参数有长度限制受限于url长度而post无限制 3、GET和POST还有一个重大区别简单的说
GET产生一个TCP数据包POST产生两个TCP数据包
长的说 对于GET方式的请求浏览器会把http header和data一并发送出去服务器响应200返回数据 而对于POST浏览器先发送header服务器响应100 continue浏览器再发送data服务器响应200 ok返回数据。 也就是说GET只需要汽车跑一趟就把货送到了而POST得跑两趟第一趟先去和服务器打个招呼“嗨我等下要送一批货来你们打开门迎接我”然后再回头把货送过去。 因为POST需要两步时间上消耗的要多一点看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑跳入需谨慎。为什么 GET与POST都有自己的语义不能随便混用。 据研究在网络环境好的情况下发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下两次包的TCP在验证数据包完整性上有非常大的优点。 并不是所有浏览器都会在POST中发送两次包Firefox就只发送一次。 建议 1、get方式的安全性较Post方式要差些包含机密信息的话建议用Post数据提交方式 2、在做数据查询时建议用Get方式而在做数据添加、修改或删除时建议用Post方式 案例一般情况下登录的时候都是用的POST传输涉及到密码传输而页面查询的时候如文章id查询文章用get 地址栏的链接为article.php?id11用post查询地址栏链接为article.php 不会将传输的数据展现出来。 增加
get传输数据是通过URL请求以field字段 value的形式置于URL后并用?连接多个请求数据间用连接如http://127.0.0.1/Test/login.action?nameadminpasswordadmin这个过程用户是可见的post传输数据通过Http的post机制将字段与对应值封存在请求实体中发送给服务器这个过程对用户是不可见的
Get传输的数据量小因为受URL长度限制但效率较高Post可以传输大量数据所以上传文件时只能用Post方式
post较get安全性较高get是不安全的因为URL是可见的可能会泄露私密信息如密码等.
get方式只能支持ASCII字符向服务器传的中文字符可能会乱码post支持标准字符集可以正确传递中文字符。 二三、九种内置对象
JSP内置对象就是在编写JSP页面时不需要做任何声明就可以直接使用的对象。
九大内置对象分别是request、response、session、application、out、pageContext、config、page和exception 二四、线程锁synchronized和lock区别
区别1Synchronized 是Java的一个关键字而Lock是java.util.concurrent.Locks 包下的一个接口
区别2Synchronized 使用过后会自动释放锁而Lock需要手动上锁、手动释放锁。在 finally 块中
区别3Lock提供了更多的实现方法而且 可响应中断、可定时 而synchronized 关键字不能响应中断
区别4synchronized关键字是非公平锁即不能保证等待锁的那些线程们的顺序而Lock的子类ReentrantLock默认是非公平锁但是可通过一个布尔参数的构造方法实例化出一个公平锁
公平锁与非公平锁
公平锁就是先等待的线程先获得锁。
非公平锁就是不能够保证 等待锁的 那些线程们的顺序
公平锁因为需要维护一个等待锁资源的队列所以性能相对低下
区别5synchronized无法判断是否已经获取到锁而Lock通过tryLock()方法可以判断是否已获取到锁
区别6Lock可以通过分别定义读写锁提高多个线程读操作的效率。
区别7二者的底层实现不一样synchronized是同步阻塞采用的是悲观并发策略Lock是同步非阻塞采用的是乐观并发策略底层基于volatile关键字和CAS算法实现 二五、线程的生命周期
线程的生命周期一共分为五个部分分别是新建就绪运行阻塞以及死亡。 二六、servlet生命周期
servlet生命周期
1、初始化阶段Servlet容器会创建一个Servlet实例并调用【init()】方法
2、处理客户端请求阶段每收到一个客户端请求服务器就会产生一个新的线程去处理
3、终止阶段调用destroy方法终止。
主要有三个方法 init()初始化阶段 service()处理客户端请求阶段 destroy()终止阶段 二七、并发和并行的区别
并发Concurrent
在操作系统中是指一个时间段中有几个程序都处于已启动运行到运行完毕之间且这几个程序都是在同一个处理机上运行。
就想前面提到的操作系统的时间片分时调度。打游戏和听音乐两件事情在同一个时间段内都是在同一台电脑上完成了从开始到结束的动作。那么就可以说听音乐和打游戏是并发的。
并行
并行Parallel当系统有一个以上CPU时当一个CPU执行一个进程时另一个CPU可以执行另一个进程两个进程互不抢占CPU资源可以同时进行这种方式我们称之为并行(Parallel)。
这里面有一个很重要的点那就是系统要有多个CPU才会出现并行。在有多个CPU的情况下才会出现真正意义上的『同时进行』。
并发指的是多个事情在同一时间段内同时发生了。
并行指的是多个事情在同一时间点上同时发生了。
并发的多个任务之间是互相抢占资源的。
并行的多个任务之间是不互相抢占资源的 二八、为什么现在大多数网站使用html/htm很少使用jsp
以前jspaspaspx等很流行那是因为当时前端网页与后端代码混合开发。HTML只负责静态网页其他的脚本负责实现动态网页。对于动态网页写几行HTML再插几句ASP、JSP代码然后再写几行HTML再写几行jsp里面还打印几行HTML内容……很难阅读也很难调试。写一个网页既要懂网页设计字体、颜色、布局、动画又要懂代码编程、数据库、业务逻辑。那时开发网站的基本都是“全栈工程师”。
现在有了各种前段框架(JQueryAjaxAngularVueBootstrapReact……)前后端代码分开开发。前端使用HTML和js来完成各种复杂的动态效果重新刷新和加载后端数据而不需要向后端索要整个网页内容。前端负责html、css、js主要是美编、设计、图片处理、js程序员进行开发。而后端只负责业务及数据处理各种语言都能实现以java、.net、php、python等语言为主。这些后端数据URL可以自己定义后缀名只要后端增加一个路由解析就可以了。所以呈现在浏览器上的URL基本都是HTML后缀的。
注
所有面试官问的题尽量多答最好保证一道题至少扯2分钟。 如果一道题答案只有一句话的尽量联想其他相关联的知识点只要面试官不打断就大胆说。 如果遇到不会的听都没听过的如果是个关键字就反问面试官不好意思刚刚没听清楚是问的框架还是原理方面的。之类的话如果是新的概念就抓关键字联想类似的知识点答。
eg
面向对象的三大特性继承可以联想重载重写封装可以联想访问权限和空指针异常多态可以联想通过中间类方式实现多态继承重写上转型。如果只让说一个就说除了这一个还有另外两个。
二九、其他
和equal equal可以联想空指针hashcode。
所有涉及线程安全的题一律往锁和多线程扯
抽象类和接口 多扯一个跟普通类的区别
问到反射就说完基础之后往用到反射的地方。
问锁相关就扯多线程和事务问事务就扯锁和多线程。
问到集合就扯到vector或者hashtable可以加点多线程和锁进去。stringbuild和stringbuffer同理 如果单问一两个集合的区别则可以说着说着扯到其他类型集合跟问的集合的区别。
问到异常相关的trycatch throw throwsfinally知道的全部扯出来还可以举例在什么场景用过这些方法还可以说自定义异常和原理。
总的来说就是由简化繁想的越多越好。
回答不上的题不好意思这方面的知识点我之前学习的时候没有很深入的了解今天知道不足后会在回去之后好好理解和补充的。 不积跬步无以至千里趁年轻使劲拼给未来的自己一个交代向着明天更好的自己前进吧