草庐IT

掌握这些Java基础知识,面试再也不难

jiqirenweb 2023-04-16 原文

掌握这些Java基础知识,面试再也不难,这几天一直在公司忙于学习公司的业务,很难抽出时间记录博客。之前投的简历在上周周末进行了面试,中等大小的公司,以下是问到的面试题,之前有记录过的此处会给出链接。希望能帮到各位想要找工作或者提高自己的小伙伴儿们,如果有什么需要改进的地方,还请大佬不吝赐教?? 小威在此先感谢诸佬了??

?个人主页:小威要向诸佬学习呀 ?个人简介:大家好,我是小威,一个想要与大家共同进步的男人?? 目前状况?:目前大二,在一家满意的公司实习??
?如果大佬在准备面试,找工作,刷算法,可以使用我找实习前用的刷题神器哦刷题神器点这里哟 ?欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬?

牛客部分使用反馈,个人感觉还不错,帮我找到了心仪的公司,希望各位伙伴儿们通过它也能提高不少???
以下正文开始


文章目录
?Mybatis中#{}和${}的区别?Mysql的四大特性?Linux常见的命令了解哪些?HTTP和HTTPS的区别?OSI模型有几层,分别是什么?Get和Post有什么区别?三次握手和四次挥手☕SpringMVC的工作流程?Redis的RDB和AOF文件?算法题全排列


?Mybatis中#{}和${}的区别
首先说一下SQL注入 SQL注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的实体字段中,攻击者在界面的表单信息或URL上输入一些奇怪的SQL片段(例如“or ‘1’=‘1’”这样的语句),有可能入侵参数检验不足的应用程序。 所以两种方式的区别就体现出来了:

1.#{变量名}可以进行预编译、类型匹配等操作,#{变量名}会转化为jdbc的类型。#方式能够很大程度防止sql注入; 2.$ {变量名}不进行数据类型匹配,直接替换。 方式无法方式sql注入。$ 方式一般用于传入数据库对象,例如传入表名; 3.#会自动加双引号,$不会加双引号。

这两个符号在mybatis中最直接的区别就是:#相当于对数据加上单引号,$相当于直接显示数据(只讨论字符串类型的)。
举个栗子:
#对传入的参数视为字符串,也就是它会预编译,select * from user where name = #{name},比如我传一个xiaowei,那么传过来就是 select * from user where name = 'xiaowei'; $ 将不会将传入的值进行预编译,select * from user where name=${name},比如我传一个xiaowei,那么传过来就是 select * from user where name = xiaowei; #的优势就在于它能很大程度的防止sql注入,而 $ 则不行。比如:用户进行一个登录操作,后台sql验证式样的:select * from user where username=#{name} and password = #{pwd},如果前台传来的用户名是“xiaoweihaoshuai”,密码是 “1 or 1=1”,用#的方式就不会出现sql注入,而如果换成$方式,sql语句就变成了 select * from user where username=wang and password = 1 or 1=1。这样的话就形成了sql注入。
?Mysql的四大特性
Atomicity(原子性):一个事务(transaction)中的所有操作,要么全部做完,要么全部不做,不会在中间某个环节结束。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。 Isolation(隔离性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读已提交(read committed)、可重复读(repeatable read)和串行(Serializable)。 Durability(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
?Linux常见的命令了解哪些

目录切换:cd 目录查看:ls 创建目录:mkdir 删除目录或文件:rm -rf 拷贝目录:cp 新建文件:touch 修改文件:vi 查找命令: grep,find 让普通用户临时使用root权限,只需输入自己账户的密码:sudo 查看当前目录路径:pwd 查看进程:ps -ef 结束进程:kill -9 pid(-9 强制;pid:进程号) 切换用户:su 修改文件权限:chmod


?HTTP和HTTPS的区别
HTTP协议以明文方式发送内容,不提供任何方式的数据加密。HTTP协议不适合传输一些敏感信息。而https则是具有安全性的ssl加密传输协议。 HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
?OSI模型有几层,分别是什么
OSI模型分为7层。 由最低层到高层依次是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
?Get和Post有什么区别
相同点:GET 和 POST属于OSI七层模型中的传输层,都是shttp请求方式, 底层都是 TCP/IP协议。
首先,get是从服务器上获取资源,而post方式是向服务器提交数据。
第二,get方式隐私性,安全性较差,这是由于get的参数会放到url的后面,get是把参数数据列加到提交表单的属性所指的url中,值和表单内各个字段一一对应,以name=value的方式,添加到前端界面action所指的url后面,并且用"?"进行连接,各个变量之间以“&”符号连接;而post方式是将表单中的数据放到Http协议中的请求头或消息体中。
第三,Get传输数据会受到URL的长度限制,而Post可以传输大量的数据,比如上传文件等。 例如:进口气动球阀
get请求会被保存在浏览器历史记录当中,post不会。get请求可以被收藏为书签,因为参数就是url中,但post不能。它的参数不在url中 使用get方式时,数据会显示在地址栏上。

?三次握手和四次挥手
这个知识点之前有详细记录过,点击此处传送??
☕SpringMVC的工作流程

前端发送请求被前端控制器DispatcherServlet拦截前端控制器调用处理器映射器HandlerMapping对请求URL进行解析,解析之后返回调用给前端控制器前端控制器调用处理器适配器处理调用链处理器适配器基于反射通过适配器设计模式完成处理器(控制器)的调用处理用户请求处理器适配器将控制器返回的视图和数据信息封装成ModelAndView响应给前端控制器前端控制器调用视图解析器ViewResolver对ModelAndView进行解析,将解析结果(视图资源和数据)响应给前端控制器前端控制器调用视图view组件将数据进行渲染,将渲染结果(静态视图)响应给前端控制器前端控制器响应用户请求
组件说明 DispatcherServlet:前端控制器,也称为中央控制器,它是整个请求响应的控制中心,组件的调用由它统一调度。 HandlerMapping:处理器映射器,它根据用户访问的 URL 映射到对应的后端处理器 Handler。也就是说它知道处理用户请求的后端处理器,但是它并不执行后端处理器,而是将处理器告诉给中央处理器。 HandlerAdapter:处理器适配器,它调用后端处理器中的方法,返回逻辑视图 ModelAndView 对象。 ViewResolver:视图解析器,将 ModelAndView 逻辑视图解析为具体的视图(如 JSP)。 Handler:后端处理器,对用户具体请求进行处理,也就是我们编写的Controller 类。

?Redis的RDB和AOF文件
可以参考之前写的Redis相关知识点,点击此处传送 RDB和AOF都有各种的优缺点,如果对数据安全性要求高,在实际开发中往往会结合两者来使用。

持久化方式: RDB定时对整个内存做快照;而AOF记录每一次执行的命令; 数据完整性: RDB不完整,两次备份之间会丢失数据;AOF相对完整,取决于刷盘策略; 文件大小: RDB会有压缩,文件体积小;而AOF记录命令,文件体积很大; 宕机恢复速度:RDB很快;而AOF慢,因为要执行一遍命令; 数据恢复优先级: RDB低,因为数据完整性不如AOF,AOF高,因为数据完整性更高。 系统资源占用: RDB占用高,大量CPU和内存消耗;而AOF占用低,主要是磁盘IO资源,但AOF重写时会占用大量CPU和内存资源。 使用场景: RDB在可以容忍几分钟的数据丢失,追求更快的启动速度时使用比较合适; AOF主要在对数据安全性要求较高时比较常见。


?算法题全排列
面试中问到了一道经典的算法题,经典的回溯题案例,想学习的朋友们往下试着写写哟。
题目: 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
示例 1:

输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

示例 2:

输入:nums = [0,1] 输出:[[0,1],[1,0]]

示例 3:

输入:nums = [1] 输出:[[1]]

题解如下:
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> res=new ArrayList<List<Integer>>();//存放最终结果
boolean[] isused=new boolean[nums.length];//值是否被用到过
List<Integer> list=new ArrayList<Integer>();//每次循环符合情况的结果
dfs(nums,isused,res,list);
return res;
}
private void dfs(int[] nums,boolean[] isused,List<List<Integer>> res,List<Integer> list){
if(list.size()==nums.length){
res.add(new ArrayList<Integer>(list));
return ;
}
for(int i=0;i<nums.length;i++){
if(!isused[i]){
isused[i]=true;
list.add(nums[i]);
dfs(nums,isused,res,list);
list.remove(list.size()-1);
isused[i]=false;
}
}
return ;
}
}

有关掌握这些Java基础知识,面试再也不难的更多相关文章

  1. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  2. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  3. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  4. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  5. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  6. 【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢 - 2

    HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候

  7. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  8. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  9. 【Java入门】使用Java实现文件夹的遍历 - 2

    遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg

  10. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

随机推荐