ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java黑马百度云,Java 万字长文基础知识总结(下

2021-08-07 09:03:42  阅读:106  来源: 互联网

标签:Java String 对象 数据库 基础知识 索引 线程 字长


你需要找到⼀个⽂件,但是又记不得它的确切位置或路径。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 {



public static void main(String[] args) {



String a = new String("ab"); // a 为⼀个引用



String b = new String("ab"); // b为另⼀个引用,对象的内容⼀样



String aa = "ab"; // 放在常量池中



String bb = "ab"; // 从常量池中查找


**最后,附一张自己面试前准备的脑图:**

![image](https://www.icode9.com/i/ll/?i=img_convert/4ea97e083ea637910b1cacf394e50ce9.png)

**面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典**


*   Java核心知识整理

![image](https://www.icode9.com/i/ll/?i=img_convert/9e944ac9bc0340558f5e9c3b4f188ef8.png)


*   Spring全家桶(实战系列)

![image.png](https://www.icode9.com/i/ll/?i=img_convert/8d405df96b23b861ef11cb50d238e3c2.png)


**Step3:刷题**

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

**以下是我私藏的面试题库:**

![image](https://www.icode9.com/i/ll/?i=img_convert/17b1b0c1c71c8a7a1b28273671a837a7.png)

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

**资料领取方式:[Java全套学习手册](https://gitee.com/vip204888/java-p7)**

b"); // b为另⼀个引用,对象的内容⼀样



String aa = "ab"; // 放在常量池中



String bb = "ab"; // 从常量池中查找


**最后,附一张自己面试前准备的脑图:**

[外链图片转存中...(img-Z9r0fd6F-1628297057483)]

**面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典**


*   Java核心知识整理

[外链图片转存中...(img-cd8XPapD-1628297057485)]


*   Spring全家桶(实战系列)

[外链图片转存中...(img-5jIeg36H-1628297057486)]


**Step3:刷题**

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

**以下是我私藏的面试题库:**

[外链图片转存中...(img-sVTv44IM-1628297057488)]

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

**资料领取方式:[Java全套学习手册](https://gitee.com/vip204888/java-p7)**

以上学习资料均免费分享,最后祝愿各位身体健康,顺利拿到心仪的offer!

标签:Java,String,对象,数据库,基础知识,索引,线程,字长
来源: https://blog.csdn.net/m0_60749939/article/details/119476553

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有