Java 万字长文基础知识总结(下)-王者笔记《收藏版》,java事务面试问题

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

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

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

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

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

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

正文

$ sudo apt-get update

$sudo dnf update

8.grep

你需要找到⼀个⽂件,但是又记不得它的确切位置或路径。grep可以帮助你解决这个问题。你可以使用grep命令,根据给定的关键字帮助找到⽂件。

$ grep user /etc/passwd

9.cat

作为用户,你常常需要查看来自脚本的⼀些⽂档或代码。同样,其中⼀个Linux基本命令是cat命令。它会为你显示⽂件里面的⽂本。

$ cat CMakeLists.txt

10.poweroff

有时候,你需要直接从终端来关机。这个命令就能完成这项任务。别忘了在命令的开头添加sudo,因为它需要根权限才能执⾏poweroff。

$ sudo poweroff

线程和进程的区别?


进程和线程的根本区别是进程是操作系统资源分配的基本单位,⽽线 程是处理器任务调度和执⾏的基本单位。另外区别还有资源开销、包含关 系、内存分配、影响关系、执⾏过程等。

资源开销:每个进程都有独立的代码和数据空间(程序上下⽂),程 序之间的切换会有较⼤的开销;线程可以看做轻量级的进程,同⼀类线程 共享代码和数据空间,每个线程都有自⼰独立的运⾏栈和程序计数器(PC),线程之间切换的开销小。

包含关系:如果⼀个进程内有多个线程,则执⾏过程不是⼀条线的,

⽽是多条线(线程)共同完成的;线程是进程的⼀部分,所以线程也被称为轻权进程或者轻量级进程。

内存分配:同⼀进程的线程共享本进程的地址空间和资源,⽽进程之间的地址空间和资源是相互独立的。

影响关系:⼀个进程崩溃后,在保护模式下不会对其他进程产⽣影响,但是⼀个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。

执⾏过程:每个独立的进程有程序运⾏的⼊⼝、顺序执⾏序列和程序出⼝。但是线程不能独立执⾏,必须依存在应用程序中,由应用程序提供多个线程执⾏控制,两者均可并发执⾏。

进程和线程的根本区别是进程是操作系统资源分配的基本单位,⽽线程是处理器任务调度和执⾏的基本单位。

四、数据库基础

===========

关系型数据库和非关系型数据库有哪些区别?举例说明


关系型数据库,是指采用了关系模型来组织数据的数据库,其以⾏和列的形式存储数据,以便于用户理解,关系型数据库这⼀系列的⾏和列被称为表,⼀组表组成了数据库。用户通过查询来检索数据库中的数据,⽽查询是⼀个用于限定数据库中某些区域的执⾏代码。关系模型可以简单理解为⼆维表格模型,⽽⼀个关系型数据库就是由⼆维表及其之间的关系组成的⼀个数据组织。例如:mysql、oracle、sql server NoSQL,泛指非关系型的数据库。随着互联⽹web2.0⽹站的兴起,传统的关系数据库在处理web2.0⽹站,特别是超⼤规模和⾼并发的SNS类型的web2.0纯动态⽹站已经显得⼒不从⼼,出现了很多难以克服的问题,⽽非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产⽣就是为了解决⼤规模数据集合多重数据种类带来的挑战,尤其是⼤数据应用难题。例如:redis

数据库索引是做什么用的


在关系数据库中,索引是⼀种单独的、物理的对数据库表中⼀列或多列的值进⾏排序的⼀种存储结构,它是某个表中⼀列或若⼲列值的集合和 相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

什么情况需要给字段建立索引?


表的主键、外键必须有索引;

数据量超过300的表应该有索引;

经常与其他表进连接的表,在连接字段上应该建索引;

经常出现在Where句 order by中的字段,特别是表的字段,应该建索引;

索引应该建在选择性的字段上;

索引应该建在字段上,对于的本字段甚超字段,不要建索引;

什么情况下索引会失效?


1.单独引用复合索引里非第⼀位置的索引列 假如有INDEX(a,b,c), 当条件为a或a,b或a,b,c时都可以使用索引,

但是当条件为b,c时将不会使用索引。

复合索引遵守“最左前缀”原则,即在查询条件中使用了复合索引的第 ⼀个字段,索引才会被使用。因此,在复合索引中索引列的顺序⾄关重要。如果不是按照索引的最左列开始查找,则⽆法使用索引。

2.对索引列运算,运算包括(+、-、*、/、!、、%、like’%_’(%放在前面)、or、in、exist等),导致索引失效。

错误的例⼦:select * from test where id-1=9;

正确的例⼦:select * from test where id=10;

注意!!

mysql sql 中如果使用了 not in , not exists , ( 不等于 !=) 这些不⾛ < 小于 > ⼤于 = 这个根据实际查询数据来判断,如果全盘扫描速度比索引速度要快则不⾛索引 。

3.对索引应用内部函数,这种情况下应该建立基于函数的索引。

select * from template t where ROUND(t.logicdb_id) = 1

此时应该建ROUND(t.logicdb_id)为索引。

4、类型错误,如字段类型为varchar,where条件用number。

例:template_id字段是varchar类型。

错误写法:select * from template t where t.template_id = 1

正确写法:select * from template t where t.template_id = ‘1’

5.如果MySQL预计使用全表扫描要比使用索引快,则不使用索引

6.like的模糊查询以%开头,索引失效

7.索引列没有限制 not null,索引不存储空值,如果不限制索引列是 not null,oracle会认为索引列有可能存在空值,所以不会按照索引计算

慢查询是什么?


分析MySQL语句查询性能的⽅法除了使用 EXPLAIN 输出执⾏计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为“慢查询”。

主从库是什么?


1、做数据的热备,作为后备数据库,主数据库服务器故障后,可切 换到从数据库继续⼯作,避免数据丢失。

2、架构的扩展。业务量越来越⼤,I/O访问频率过⾼,单机⽆法满⾜,此时做多库的存储,降低磁盘I/O访问的频率,提⾼单个机器的I/O性能。

3、读写分离,使数据库能支撑更⼤的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。

五、Java开发相关基础

================

MVC框架?


MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从⽽使同⼀个程序可以使用不同的表现形式。比如⼀批统计数据可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,⼀旦M改变,V应该同步更新。 [1-2] 模型-视图-控制器(MVC)是Xerox PARC在⼆⼗世纪⼋⼗年代为编程语⾔Smalltalk-80发明的⼀种软件设计模式,已被⼴泛使用。后来被推荐为Oracle旗下Sun公司Java EE平台的设计模式,并且受到越来越多的使用ColdFusion和PHP的开发者的欢迎。模型-视图-控制器模式是⼀个有用的⼯具箱,它有很多好处,但也有⼀些缺点。

js跨域请求是什么意思?


跨域访问,简单来说就是 A ⽹站的 javascript 代码试图访问 B ⽹站,包括提交内容和获取内容。由于安全原因,跨域访问是被各⼤浏览器所默认禁⽌的。

服务器500、502、503、504、505错误是什么?


HTTP 500 - 内部服务器错误

HTTP 502 - ⽹关错误

503 服务器目前⽆法使用(由于超载或停机维护)。通常,这只是暂时状态。(服务不可用)

504 表示超时,也就是客户端所发出的请求没有到达⽹关

505 服务器不支持请求中所用的 HTTP 协议版本。(HTTP 版本不受支持)

负载均衡是什么?


负载均衡建立在现有⽹络结构之上,它提供了⼀种廉价有效透明的⽅法扩展⽹络设备和服务器的带宽、增加吞吐量、加强⽹络数据处理能⼒、提⾼⽹络的灵活性和可用性。

负载均衡(Load Balance)其意思就是分摊到多个操作单元上进⾏执⾏,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从⽽共同完成⼯作任务。

Cookie和Session分别是什么?Cookie的容量限制是多少?说⼀下 Session 的⼯作原理?


Cookie是⼀段不超过4KB的小型⽂本数据,由⼀个名称(Name)、⼀个值(Value)和其它⼏个用于控制Cookie有效期、安全性、使用范围的可选属性组成。

Session:在计算机中,尤其是在⽹络应用中,称为“会话控制”。

Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,⽽是在整个用户会话中⼀直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建⼀个 Session对象。当会话过期或被放弃后,服务器将终⽌该会话。Session 对象最常见的⼀个用法就是存储用户的首选项。

如果客户端禁⽌ Cookie 能实现 Session 还能用吗?


能用。需要特殊处理。

Session共享原理是什么?怎么实现?


应用服务器间的session复制共享

基于cache DB缓存的session共享

基于redis缓存的session共享目的是实现单点登录

java的历史


1991 年Sun公司的James Gosling等⼈开始开发名称为 Oak 的语⾔,希望用于控制嵌⼊在有线电视交换盒、PDA等的微处理器;

1994年将Oak语⾔更名为Java;

Java的三种技术架构:

JAVAEE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发;

JAVASE:Java Platform Standard Edition,完成桌面应用程序的开发,是其它两者的基础;

JAVAME:Java Platform Micro Edition,开发电⼦消费产品和嵌⼊式设备,如⼿机中的程序;

正则表达式?


好处:正则的出现,对字符串的复杂操作变得更为简单。

特点:将对字符串操作的代码用⼀些符号来表示。只要使用了指定符号,就可以调用底层的代码对字符串进⾏操作。符号的出现,简化了代码的书写。

弊端:符号的出现虽然简化了书写,但是却降低了阅读性。

其实更多是用正则解决字符串操作的问题。

组:用小括号标示,每定义⼀个小括号,就是⼀个组,⽽且有自动编 号,从1开始。 只要使用组,对应的数字就是使用该组的内容。别忘了,数组要加 \\。 (aaa(wwww(ccc))(eee))技巧,从左括号开始数即可。有⼏个左括号就是⼏组。

常见操作:

1,匹配:其实用的就是String类中的matches⽅法。

String reg = “[1—9][0—9]{4,14}";

boolean b = qq.matches(reg);//将正则和字符串关联对字符串进⾏匹配。

2,切割:其实用的就是String类中的split⽅法。

3,替换:其实用的就是String类中的replaceAll();

4,获取:

1),先要将正则表达式编译成正则对象。使用的是Pattern中静态⽅法 compile(regex);

2),通过Pattern对象获取Matcher对象。

Pattern用于描述正则表达式,可以对正则表达式进⾏解析。 ⽽将规则操作字符串,需要从新封装到匹配器对象Matcher中。

然后使用Matcher对象的⽅法来操作字符串。

如何获取匹配器对象呢?

通过Pattern对象中的matcher⽅法。该⽅法可以正则规则和字符串想关联。并返回匹配器对象。

3),使用Matcher对象中的⽅法即可对字符串进⾏各种正则操作。

反射技术?


就是动态加载⼀个指定的类,并获取该类中的所有的内容。⽽且将字

节码⽂件封装成对象,并将字节码⽂件中的内容都封装成对象,这样便于操作这些成员。简单说:反射技术可以对⼀个类进⾏解剖。

反射的好处:⼤⼤的增强了程序的扩展性。

反射的基本步骤:

1、获得Class对象,就是获取到指定的名称的字节码⽂件对象。

2、实例化对象,获得类的属性、⽅法或构造函数。

3、访问属性、调用⽅法、调用构造函数创建对象。

Java 语⾔有哪些特点?


简单易学;

面向对象(封装,继承,多态);

平台⽆关性( Java 虚拟机实现平台⽆关性);

可靠性;

安全性;

支持多线程( C++ 语⾔没有内置的多线程机制,因此必须调用操作

系统的多线程功能来进⾏多线程程序设计,⽽ Java 语⾔却提供了多线程支持);

支持⽹络编程并且很⽅便( Java 语⾔诞⽣本身就是为简化⽹络编程

设计的,因此 Java 语⾔不仅支持⽹络编程⽽且很⽅便);

重载和重写的区别?


重载: 发⽣在同⼀个类中,⽅法名必须相同,参数类型不同、个数

不同、顺序不同,⽅法返回值和访问修饰符可以不同,发⽣在编译时。

重写: 发⽣在⽗⼦类中,⽅法名、参数列表必须相同,返回值范围

小于等于⽗类,抛出的异常范围小于等于⽗类,访问修饰符范围⼤于等于⽗类;如果⽗类⽅法访问修饰符为 private 则⼦类就不能重写该⽅法。

接⼝和抽象类的区别是什么?


接⼝的⽅法默认是 public,所有⽅法在接⼝中不能有实现(Java 8 开始接⼝⽅法可以有默认实现),⽽抽象类可以有非抽象的⽅法。

接⼝中除了static、final变量,不能有其他变量,⽽抽象类中则不⼀

定。 ⼀个类可以实现多个接⼝,但只能实现⼀个抽象类。接⼝自⼰本身可以通过extends关键字扩展多个接⼝。

接⼝⽅法默认修饰符是public,抽象⽅法可以有public、protected和 default这些修饰符(抽象⽅法就是为了被重写所以不能使用private关键字 修饰!)。 从设计层面来说,抽象是对类的抽象,是⼀种模板设计,⽽接⼝是对⾏为的抽象,是⼀种⾏为的规范。

备注:在JDK8中,接⼝也可以定义静态⽅法,可以直接用接⼝名调

用。实现类和实现是不可以调用的。如果同时实现两个接⼝,接⼝中定义了⼀样的默认⽅法,则必须重写,不然会报错。

成员变量与局部变量的区别有哪些?


从语法形式上看:成员变量是属于类的,⽽局部变量是在⽅法中定义

的变量或是⽅法的参数;成员变量可以被 public,private,static 等修饰符所修饰,⽽局部变量不能被访问控制修饰符及 static 所修饰;但是,成员变量和局部变量都能被 final 所修饰。

从变量在内存中的存储⽅式来看:如果成员变量是使用static修饰的,

那么这个成员变量是属于类的,如果没有使用static修饰,这个成员变量是属于实例的。⽽对象存在于堆内存,局部变量则存在于栈内存。

从变量在内存中的⽣存时间上看:成员变量是对象的⼀部分,它随着

对象的创建⽽存在,⽽局部变量随着⽅法的调用⽽自动消失。

成员变量如果没有被赋初值:则会自动以类型的默认值⽽赋值(⼀种

情况例外:被 final 修饰的成员变量也必须显式地赋值),⽽局部变量则不会自动赋值。

== 与 equals?


== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象 是不是同⼀个对象(基本数据类型比较的是值,引用数据类型比较的是内存地址)。

equals() : 它的作用也是判断两个对象是否相等。但它⼀般有两种使用情况:

情况1:类没有覆盖 equals() ⽅法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。

情况2:类覆盖了 equals() ⽅法。⼀般,我们都覆盖 equals() ⽅法来比较两个对象的内容是否相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。

举个例⼦:

public class test1 {

最后

看完美团、字节、腾讯这三家的面试问题,是不是感觉问的特别多,可能咱们又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。

开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题

注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友

最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?

互联网工程师必备的面试1000题

而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题

最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?

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

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

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

最后

看完美团、字节、腾讯这三家的面试问题,是不是感觉问的特别多,可能咱们又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。

开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题

注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友

[外链图片转存中…(img-uNADnPMV-1713606410322)]

互联网工程师必备的面试1000题

而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题

[外链图片转存中…(img-ipsNEGqg-1713606410322)]

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

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

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

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值