Java面试题-web,2024年最新快手牛客网面试

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

关于第一个缺点,完全可以通过系统的缓存机制来减小对性能的影响。第二个缺点,我想只能通过采用一些设计模式来得到改善吧。

@、四种会话跟踪技术

会话作用域ServletsJSP 页面描述

page否是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成 servlet 的 JSP 页面

request是是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)

session是是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常会跨越多个客户机请求

application是是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域

@、cookie&session

@、cookie和浏览器缓存的区别?

@、什么是cookie?session?

Cookie是会话技术,将用户的信息保存到浏览器的对象,内容通过请求头和响应头由HTTP传输,

Session也是会话技术,将Session的信息保存到服务器的对象.Session是基于Cookie的,利用Cookie向浏览器回写JSessionID.

如果服务器端发送重复的Cookie那么会覆盖原有的Cookie,

Cookie是基于Http协议

session的原理:

session实现底层依赖于cookie【会话级别】,将JSESSIONID存入Cookie中。

会话关闭了,cookie被销毁,jsessionid丢失,但是session并没有销毁。jsessionid本来在session端的,是它传给session的,session还有一份的

@、session的实现原理

session底层是依赖Cookie的!我们来理解一下session的原理吧!

当我首次去银行时,因为还没有账号,所以需要开一个账号,我获得的是银行卡,而银行这边的数据库中留下了我的账号,我的钱是保存在银行的账号中,而我带走的是我的卡号。

当我再次去银行时,只需要带上我的卡,而无需再次开一个账号了。只要带上我的卡,那么我在银行操作的一定是我的账号!

当首次使用session时,服务器端要创建session,session是保存在服务器端,而给客户端的session的id(一个cookie中保存了sessionId)。客户端带走的是sessionId,而数据是保存在session中。

当客户端再次访问服务器时,在请求中会带上sessionId,而服务器会通过sessionId找到对应的session,而无需再创建新的session。

@、cookie的应用

(1)案例:显示上次访问时间

创建Cookie,名为lasttime,值为当前时间,添加到response中;

在AServlet中获取请求中名为lasttime的Cookie;

如果不存在输出“您是第一次访问本站”,如果存在输出“您上一次访问本站的时间是xxx”;

response.setContentType(“text/html;charset=utf-8”); Cookie cookie = new Cookie(“lasttime”, new Date().toString()); cookie.setMaxAge(60 * 60); response.addCookie(cookie); Cookie[] cs = request.getCookies(); String s = “您是首次访问本站!”; if(cs != null) { for(Cookie c : cs) { if(c.getName().equals(“lasttime”)) { s = “您上次的访问时间是:” + c.getValue(); } } } response.getWriter().print(s); }

(2)设置Cookie的路径

设置Cookie的路径需要使用setPath()方法,例如:

cookie.setPath(“/cookietest/servlet”);

(3)显示曾经浏览过的商品

您浏览过的商品:

Cookie[] cs = request.getCookies();

if(cs != null) {

for(Cookie c : cs) {

if(c.getName().equals(“goods”)) {

out.print(c.getValue());

}

}

}

@、Cookie规范(了解)

l Cookie大小上限为4KB;

l 一个服务器最多在客户端浏览器上保存20个Cookie;

l 一个浏览器最多保存300个Cookie;

什么是Cookie的生命(了解)

Cookie不只是有name和value,Cookie还是生命。所谓生命就是Cookie在客户端的有效时间,可以通过setMaxAge(int)来设置Cookie的有效时间。

l cookie.setMaxAge(-1):cookie的maxAge属性的默认值就是-1,表示只在浏览器内存中存活。一旦关闭浏览器窗口,那么cookie就会消失。

l cookie.setMaxAge(60*60):表示cookie对象可存活1小时。当生命大于0时,浏览器会把Cookie保存到硬盘上,就算关闭浏览器,就算重启客户端电脑,cookie也会存活1小时;

l cookie.setMaxAge(0):cookie生命等于0是一个特殊的值,它表示cookie被作废!也就是说,如果原来浏览器已经保存了这个Cookie,那么可以通过Cookie的setMaxAge(0)来删除这个Cookie。无论是在浏览器内存中,还是在客户端硬盘上都会删除这个Cookie。

@、Session和cookie有什么区别?

1、cookie是保存在客户端浏览器缓存(磁盘),session存在于服务器内存的

2、session是本次会话有效,会话结束,session消失;cookie可以设置有效期,每次对本网站的访问会自动在请求投资中和请求一起发送到服务器。

3、session中可以放对象,cookie只可以放字符串。

4、Session其实是利用Cookie进行信息处理的,当用户首先进行了请求后,服务端就在用户浏览器上创建了一个Cookie,名称为sessionid,当这个Session结束时,其实就是意味着这个Cookie就过期了。

5、cookie和session都是用来跟踪浏览器用户身份的会话方式

@、cookie方法

添加cookie 的方式:

Cookie c = new Cookie(“uname”,“xiaowang”));

response.addCookie©;

只能接受键值对:new Cookie(“key”,“value”);

取得

Cookie[] request.getCookies();得到所有Cookie(多个)

写入

resp.addCookie( cookie )写入浏览器

setMaxAge(秒数)//设置Cookie的有效期,超过了该时间后Cookie会自动销毁.

setPath(“客户端WEB路径”)//在指定的路径内有效

获取Cookie的name:    getName()

获取cookie的value:   getValue()

@、Cookie的持久化

1.持久化:就是把数据从内存中写到硬盘上

cookie默认是在浏览器缓存中【内存中】

cookie通过持久化设置,可以保存在硬盘上。

2.设置方法:

cookie.setMaxAge(int sec);      设置cookie最大生存时间,单位为秒

cookie的有效路径

概述:路径用来指定:访问哪个路径带哪些cookie

设置方法:

cookie对象  setPath(String path);   设置cookie的有效路径

@、session的生命周期

1、创建:   第一次调用request.getSession()时创建。

2、销毁:

①session.invalidate()  强制销毁session对象。【相当于主动去银行销户】

②session过期。【相当于过一段时间不操作银行账户,银行给我销户】

30分钟。在tomcat/conf/web.xml中配置的

30

不能太少,否则还会走默认30分钟

③服务器非正常关闭 Console—>Terminate 终结【银行突然倒闭】

注意:

(服务器正常关闭,不会销毁,序列化数据到 tomcat/work/catalina/localhost/项目名/SESSIONS.ser,在服务器重新启动时,又会重新加载序列化文件,session完全还原)

应用范围:企业开发大多用Session,登录验证、登录信息的保存、权限过滤

Cookie禁用

使用js中的navigator.cookieEnabledo判断cookie是否被禁用。

@、4个域对象?

1_application:有一些数据希望一直保存着,最好和项目的运行生命周期保持一致,此时这些数据可以存放在ServletContext内

2_session:有一些数据希望本次会话有效,session内,可以跨请求(多个请求之间可以共享,但是每个用户都有自己独立的域对话(从第一次请求开始一个会话,到最后一次为止,视为一次会话.默认是30分钟))

3_request:有一些数据希望本次请求内有效,request内

4_pageContext:很少用,因为这个对象是在service方法中创建好的,意味着在jsp范围内有效

@、网站如果有大量的人登陆访问。那么会产生很多的session,如果你是程序员你该怎么办。

session默认保存在内存中,内存资源宝贵,session数据量大导致内存利用率高,以下方案解决session内存存储问题:

1、可以设置session超时时间,达到超时时间session自动清空

20

  

2、将session中的数据序列化到硬盘中

3、不使用session,使用cookie(此方法存在安全性问题)

@、JSP

全名Java Server Pages

它是建立在Servlet规范之上的动态网页开发技术

组成 : html+java+jsp的标签

jsp的作用 : 大白话:在html代码中嵌套java代码

@、jsp和Servlet:

JSP在本质上就是SERVLET,但是两者的创建方式不一样.Servlet完全是JAVA程序代码构成擅长于流程控制和事务处理而通过Servlet来生成动态网页;

JSP由HTML代码和JSP标签构成,可以方便地编写动态网页

因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页.在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层.

答案2:

JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

@、JSP有哪些动作?作用分别是什么?

@、JSP共有以下6种基本动作

jsp:include:在页面被请求的时候引入一个文件。

jsp:forward:把请求转到一个新的页面。

jsp:setProperty:设置JavaBean的属性。

jsp:getProperty:输出某个JavaBean的属性。

jsp:useBean:寻找或者实例化一个JavaBean。

jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。

@、JSP四大域对象和九大内置对象

四大域对象:PageContext、request、session、servletContext

Jsp有哪些内置对象?作用分别是什么?

Page,pageContext,request,response,session,application,out,config,exception

Page指的是JSP被翻译成Servlet的对象的引用.

pageContext对象可以用来获得其他8个内置对象,还可以作为JSP的域范围对象使用.pageContext中存的值是当前的页面的作用范围;

request代表的是请求对象,可以用于获得客户机的信息,也可以作为域对象来使用,使用request保存的数据在一次请求范围内有效。

Response是响应对象,代表的是从服务器向浏览器响应数据.

Session代表的是一次会话,可以用于保存用户的私有的信息,也可以作为域对象使用,使用session保存的数据在一次会话范围有效

Application:代表整个应用范围,使用这个对象保存的数据在整个web应用中都有效。

Out:JSPWriter是用于向页面输出内容的对象

Config:指的是ServletConfig用于JSP翻译成Servlet后 获得Servlet的配置的对象.

Exception:在页面中设置isErrorPage=”true”,即可使用,是Throwable的引用.用来获得页面的错误信息。

@、JSP常用的指令有哪些

<%@ page language=” ”

import=” ”

errorPage=” ”

isErrorPage=” ”

method=””

contextPage=” ” %>

<%@? include file=” ”%><%@tiglib uri=” ”%>

@、JSP的常用指令

<%@page language=”java” contenType=”text/html;charset=gb2312” session=”true” buffer=”64kb” autoFlush=”true” isThreadSafe=”true” info=”text” errorPage=”error.jsp” isErrorPage=”true” isELIgnored=”true” pageEncoding=”gb2312” import=”java.sql.*”%>

isErrorPage(是否能使用Exception对象),

isELIgnored(是否忽略表达式)

<%@include file=”filename”%>

<%@taglib prefix=”c”uri=”http://……”%>

@、AjAX的理解?

简单来说:异步加载,局部刷新。

AJAX 是一种用于创建快速动态网页的技术。

通过在后台与服务器进行少量数据交换,在不重新加载整个网页的情况下,对网页进行部分更新。(javascript的httprequest请求,异步返回处理结果, 可以在页面不提交的情况下,获取服务器或数据库的数据,直接呈现给页面。)

传统网页不使用AJAX,如果需要刷新网页,则需要重新加载整个网页:

有很多Ajax应用场景: 异步用户名校验(用户注册用户名校验失去焦点发送请求校验用户名),Google地图,股票数据更新,…

细节:

通过Ajax和服务端传递数据:如果数据量很小,传输字符串;如果数据量比较多,传输xml。

AJAX=异步js和xml,是一种新的思想,整合之前的多种技术,用于创建快速交互式网页应用的网页开发技术。

ajax: 异步通信(实现页面无闪刷新效果) 调用浏览器发送请求的对象  发送一个请求到后台  后台servlet处理完返回给前台

前台有一个回调函数  处理后台的响应结果!

@、Ajax同步与异步区别

属性:url(发送请求地址)、type(请求方式)

同步:async值为false,发送ajax请求后,后面还有代码需要执行,将服务器响应交由另一个js函数进行处理,在服务器没有响应或者响应结果js函数还没有处理完成return时,包含请求代码的函数的剩余代码不能够执行。

提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事。

异步:async值为true,…包含请求代码的函数的剩余代码将继续执行。

请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕

@、ajax如何实现异步定时5秒刷新

setInterval(function() {

$(“#content”).load(location.href+" #content>*“,”");

}, 5000);

@、json

json(JavaScript Object Notation)是一种轻量级的数据交换方式。json采用完全独立于语言的文本格式,就是说不同的编程语言JSON数据是一致的。

(易于阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率))。

json对象格式:

{“key”:“value”,“key”:“calue”,…}

总结

我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。

面试题多多少少对于你接下来所要做的事肯定有点帮助,但我更希望你能透过面试题去总结自己的不足,以提高自己核心技术竞争力。每一次面试经历都是对你技术的扫盲,面试后的复盘总结效果是极好的!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
href+" #content>*“,”");

}, 5000);

@、json

json(JavaScript Object Notation)是一种轻量级的数据交换方式。json采用完全独立于语言的文本格式,就是说不同的编程语言JSON数据是一致的。

(易于阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率))。

json对象格式:

{“key”:“value”,“key”:“calue”,…}

总结

我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。

面试题多多少少对于你接下来所要做的事肯定有点帮助,但我更希望你能透过面试题去总结自己的不足,以提高自己核心技术竞争力。每一次面试经历都是对你技术的扫盲,面试后的复盘总结效果是极好的!

[外链图片转存中…(img-fQndM9iM-1713066862659)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-uW11rh1Q-1713066862659)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值