寒假java 第一轮总结

第一部分 语法基础篇

 第一章 概述

1.1计算机的的组成部分

1.计算机的组成主要分为两大类:

(1)硬件:是可以看到的物理部分,基本都是一些电子元器件 
常见的硬件:
CPU :全称为 Center Processing Unit 中午翻译为 中央处理器 主要的功能是控制和数值计算功能。

GPU : 全称为Graphic Processing Unit 中文名称为显卡 图形图像处理单元 主要的功能是计算图形数据

存储设备: 永久性存储设备ROM任何数据都是以二进制的形式存储的  一般有以下几个类型
机械硬盘
固态硬盘
U盘
光盘
移动硬盘

输入输出设备:
键盘:输入字符数据
鼠标:输入定位数据
显示器:输出图形图像数据
扬声器:输出声音数据
麦克风:输入声音数据
打印机:输出图形图像文本数据
扫描仪:输入图形图像文本数据

网络设备:
输入:从互联网上下载数据
输出:从本地上传数据到互联网

 

(2)软件:是看不见的部分,是一系列的指令,主要用于控制硬件去完成一些特定的工作。
同时软件是指一系列按照特定顺序组织的计算机数据与指令的集合
  软件一般只有两种分类
 

 1. 系统软件:同时也被称之为操作系统主要是用来控制和管理底层硬件的一套指令,操作系统为用
户提供最基本的计算机功能。
 2. 应用软件:基于系统软件之上的,为用户带了特定领域服务的软件


1.2人机交互方式


一般来说我们和计算机有以下两种交互方式

 1. 图形化界面操作方式:操作简单,表现直观,容易上手操作,步骤繁琐,占用空间大
 2. 命令行操作方式 CMD(Command win+R 输入cmd回车)窗口:操作复杂,命令较多,不容易
上手,步骤简单,占用空间小,适合远程操作
 - 在使用命令行的操作方式时我们经常会使用以下几个dos命令
命令             作用
 c:               进入C盘根目录
 d:              进入D盘根目录
 cd xxx       进入xxx目录
 dir             查看当前目录下有什么文件和目录
 cd /           进入到当前所在盘符的根目录
 cd ..          返回上一级目录
 cls            清屏
 exit          退出cmd窗口
1.3 计算机语言
计算机本身就是有一系列物理硬件组成的,它们之间的沟通方式就是电信号,高低电压-二进制数据.所以在与计算机交互时,我们就得通过二进制来进行,早起的汇编语言都是以二进制命令

(1)机器语言
根据平台的不同其所表现的形式也不同,为了让计算机能够懂得人类的目的,人类必须以二进制的
形式向计算机输入数据。计算机能懂,人不太懂,对初学者十分不友好的。
(2)汇编语言
通过一些单词也叫助记符,将一些常用的操作用单词表示,在程序中慢慢出现了人类的语言。比如
计算 2+3 的结果,在汇编语言里是一下结果。这种代码计算机读不懂,还得将这些助记符包括数据转换
成对应的二进制提交给计算机进行计算。转换的工具,称之为汇编器。汇编语言它的计算方式,还是依
赖于计算机的计算方式的。
(3)高级编程语言
20 世纪 50 年代产生,第一个众所周知的高级编程语言: C 语言 ->C++ 语言 ->Java 语言 ->C#-Python
高级编程语言完全由单词,符号和数字组成,并且书写流程也是符号人类流程。比如计算 2+3 如下
代码所示,更容易让人类去理解。同样计算机不能够读懂这段代码,还得将代码进行转换二进制提交给
计算机。
1.静态编译语言: C C++ Java
静态:在定义变量的时候有明确的数据类型的区分
编译:将源代码全部进行编译 生成一个可执行的二进制文件 计算机去执行这个二进
制文件来运行程序。(翻译一本英文书)
2.动态解释语言: Python JS
动态:在定义变量的时候没有明确的数据类型的区分
解释:将源代码从头到尾 读取一行 编译一行 运行一行(同声传译)

1.4 软件开发

软件开发流程

1. 需求分析
2. 编码实现
3. 测试编码
4. 上线运维
5. 更新迭代
6. 下线
 
 
软件岗位
 
移动端软件研发 Anroid IOS - 物联网
Web 前端研发 - 数据可视化工程师
PC 端研发
后端研发

1.5 Java语言介绍

Java 语言的前身 Oak (橡树), 1994 年詹姆斯高斯林和他的团队开发出来的嵌入式编程语言。随着
互联网的发展,紧随潮流编程互联网应用程序开发语言(面向对象),一直到 2010 Sun 公司被 Oracle
收购, Java 就属于 Oralce 的子产品。
 
 
Oracle 公司主要业务:
 
数据库 Oralce 数据库 随后也把民间产品 MySQL 也收购了
Linux 服务器操作系统 Solaris redhat Ubuntu 深度 SUSE
编程语言 Java
 
 
Microsox 公司主要业务:
 
SQL Server
Windows/Windows Server
C++/C#
 
 
Java 技术架构
 
JavaSE Java Standard Edition Java 标准版:桌面型应用程序
JavaEE Java Enterprise Edition Java 企业版:服务器应用程序
JavaME Java Micro Edition Java 微型版:嵌入式应用程序
 
 
Java 最大的特点 —— 跨平台
 
跨平台的意思就是说,一个软件可以在多个平台上运行,而不用更改软件的内容。 是因为 JVM 的功劳: JVM Java Virtual Machine Java 虚拟机。
Java 源代码文件后缀名为 xxx.java 所编译出来的二进制文件后缀名为 xxx.class
JVM 主要负责将 java 语言的字节码文件转换为本地操作系统指令的一个工具软件。
所以,最终是字节码文件在跨平台!

1.6Java开发环境搭建

JRE JDK
 
 
JRE Java Runtime Environment Java 运行环境:如果我们的计算机仅仅想运行 Java 程序的话,装
这个软件即可。 JRE = JVM + 核心类库。
 
JDK Java Development Kit Java 开发工具包:如果我们的计算机想要去开发一个 Java 程序的话,
装这个软件即可。 JDK = 开发工具 + JRE
 
 
JDK 的下载与安装
 
1. 先登录注册 Oracle
2. Oralce 官网下载 JDK ,最新 JDK15 ,我们目前用 JDK8 https://www.oracle.com
3. 点击 Products
4. 点击 SoxWare 下的 Java
5. 右上角 DownloadJava
6. 找到 JavaSE8 点击 JDK Download
7. 下拉 在下载列表中选择 Windows X64
8. 双击打开 jdk 安装程序
9. 点击下一步
10. JDK 不需要更改目录 直接下一步
11. JRE 不需要更改目录 直接下一步
12. 安装完成 点击关闭即可
13. 验证 jdk 是否安装成功
14. win+r 打开 cmd 输入 java - version
 
jdk 安装目录介绍
bin 目录: binary 放的都是开发工具
javac.exe java 编译工具
用法 : javac
java.exe java 运行工具
用法 : java [-options] class [args...]
( 执行类 )
java [-options] -jar jarfile [args...]
( 执行 jar 文件 )
db 目录:放的是支持数据库开发的一些工具包
include 目录:放的是一些链接底层的一些 C 头文件代码
jre 目录: jdk 自带的运行环境
lib 目录: library 存放的是一些第三方 Java
javafx-src.zip javafx 图形化界面开发的源码包
src.zip Java 本身的源代码包
 
配置 path 环境变量
1. 复制 jdk bin 目录的绝对地址 C:\Program Files\Java\jdk1.8.0_77\bin
2. 右键此电脑 点击属性
3. 点击高级系统设置
4. 点击环境变量
5. 系统变量中选择 Path
6. 右上角 新建 将地址复制进去即可
7. 一路确定出去
8. 重启 cmd 再去尝试 javavc java

 

1.7运行Java程序

VSCode 代码编辑器 https://code.visualstudio.com/
汉化:左下角管理 Extension 搜索 Chinese 选择 Chinese 中文简体汉化包 点击绿色 install 右下角提示
重启 重启即可
主题:管理 颜色主题 自选
编码:管理 设置 文本编辑器 文件 Encoding 选择 gbk 结尾
字体:管理 设置 文本编辑器 字体 font size
关联代码所在的文件夹:文件 打开文件夹 选择 JavaDay01
 
 
步骤一:新建 Java 源代码文件并写入类
点击新建文件按钮,输入 Java 源代码文件名称和后缀名,例如 Sample01.java
在文件中写入如下代码:
public class Sample01 { 
}
 
 
 

 注:public class Sample01 中的 Sample01 是类名,而且在Java源代码中,可以存在多个类,但是

最多只能有一个 public 开头的类,并且该类的类名必须与文件名保持一致
 
 
步骤二:编译该源代码文件
打开控制台窗口 cmd ,将目录切换到 JavaDay01 目录下
 
C : \Users\HENG > cd Desktop
C : \Users\HENG\Desktop > cd JavaDay01
 
再输入 javac Sample01.java 对源代码文件进行编译
 
C : \Users\HENG\Desktop\JavaDay01 > javac Sample01 . java
 
如果没有任何输出,则表明编译成功,并生成同名的字节码文件 Sample01.class
 
 
步骤三:运行该字节码文件
输入 java Sample01 即可
C : \Users\HENG\Desktop\JavaDay01 > java Sample01
错误 : 在类 Sample01 中找不到 main 方法 , 请将 main 方法定义为 :
public static void main ( String [] args )
否则 JavaFX 应用程序类必须扩展 javafx . application . Application
此时发现运行工具提示错误,对于任何一个程序而言,程序的运行都需要主函数,所以将主函数写
入其中。
public class Sample01 {
 public static void main(String[] args) { 
System.out.println("Hello World!"); 
}
 }
再重新编译和运行
C : \Users\HENG\Desktop\JavaDay01 > javac Sample01 . java
C : \Users\HENG\Desktop\JavaDay01 > java Sample01
Hello World !
 

1.8常见的错误

1.语法错误
语法错误通常有以下几种错误:
 
单词评写
遗漏分号
使用中文符号的问题
大括号不匹配
遗漏关键字单词
 
2.运行错误
是指编译能够通过,但是在运行期间出现的问题

 

3.逻辑错误

代码的运行结果和自己认为的结果不一样!

 

 

 

2章 基本数据与运算

2.1 关键字

关键字是指被高级编程语言赋予特殊含义的一些单词,关键字一般都是由小写字母组成。
用于定义数据类型的关键字: byte short int long float double char boolean void class interface
用于定义数据类型值的关键字: true false null
用于定义流程控制语句的关键字: if else switch case default while do for break continue return
用于定义访问权限修饰符的关键字: public protected private
用于定义继承关系的关键字: extends implements
用于定义实例对象的关键字: new this super instanceof
用于定义函数类型的关键字: static final abstract synchronized
用于处理异常的关键字: try catch finally throw throws
用于包的关键字: package import
其他的一些修饰关键字: native assert volatile transient
 

2.2 标识符

标识符指的是我们在程序中对变量、函数、类、接口、常量所定义的名称,也就是说这些名称是我
们自定义的。在我们自己定义标识符时,我们必须满足以下组成规则:
 
标识符可以由数字、字母、下划线 _ 、美元符 $ 组成
标识符不能以数字开头,当然下划线和美元符其实是可以开头的,但不推荐
标识符不能是关键字
标识符也不能是 Java 内置类的名称
标识符可以为任意长度,但必须是一个连续的词
标识符严格区分大小写
注: 标识符是为那些抽象的数据进行的自定义起名,为了方便程序的阅读和理解,起名尽量要有
含义,不要通篇都是 a b c d e f g.... 。在一些特殊的情况下(循环里 特殊数学符号),可以使用 i j k
m n 之类的
 
标识符命名的规范:
大驼峰式:主要针对类名,接口名。所有单词的首字母大写
小驼峰是:主要针对于变量名,函数名。除了第一个单词之外,其他单词首字母大写
常量规范:所有单词字母大写,单词与单词之间用下划线分隔
包名规范:所有单词字母小写,单词与单词之间用句号 . 分隔
 
 

2.3 注释

注释是用于注解和说明程序的一些程序中的内置文本信息的,但这些内置文本不属于代码的范畴。
所以在对含有注释的源代码进行编译时,所生成的字节码中不含有注释。
 
注释主要有三种:
单行注释 // 注释内容 直到换行为止
多行注释 /* 注释内容 内部可以进行换行 */
文档注释 /** 注释内容 内部可以进行换行 */ :文档注释可以被编译器识别,并生成相应
的程序说明书。对某一个类进行文档生成时,该类必须是 public

注:注释除了有解释说明程序的功能之外,还可以用来调试程序。 多行注释中,不能再出现多行注释

 

2.4 常量与进制

常量就是指在程序中直接出现的一些数据,也叫字面量 ,而常量通常有以下几种

整数常量
小数常量
字符常量:由一个字母、数字、符号被单引号 ( '' ) 标识的数据
字符串常量:由若干个字母、数字、符号被双引号 ( "" ) 标识的数据
布尔类型常量
null 常量
 
进制转换
 
 
二进制转十进制
 
十进制                                      二进制数
0                                                     0
1                                                     1
2                                                    10
3                                                    11
4                                                   100
5                                                   101
6                                                   110
7                                                   111
8                                                  1000
规律就是: 1 1 1 1 1 1 1 1 - 128 64 32 16 8 4 2 1
10010101 十进制是 128 + 16 + 4 + 1 = 149
十进制 149 = 9 * 10 0 + 4 * 10 1 + 1 * 10 2
二进制 1011 = 1 * 2 0 + 1 * 2 1 + 0 * 2 2 + 1 * 2 3 = 1 + 2 + 0 + 8 = 11
一个二进制位称之为是一个比特 bit ;八个比特称之为一个字节 byte ;字节是计算机当中的最小计
数单元。
1 byte = 8 bit
1 kb = 1024 byte
1 mk = 1024 kb
1 gb = 1024 mb
1 tb = 1024 gb
十进制转二进制
53 ÷ 2 = 26 ~ 1
26 ÷ 2 = 13 ~ 0
13 ÷ 2 = 6 ~ 1
6 ÷ 2 = 3 ~ 0
3 ÷ 2 = 1 ~ 1
1 ÷ 2 = 0 ~ 1
余数从下到上 110101 = 1 + 4 + 16 + 32 = 53
 
二进制转八进制
10010101 => 010-010-101 => 0225 = 5 * 8 0 + 2 * 8 1 + 2 * 8 2 =5 + 16 + 128 = 149
 
二进制转十六进制
System . out . println ( false );
}
} 10010101 => 1001-0101 => 0x95 = 5 * 16 0 + 9 ^ 16 1 = 5 + 144 = 149
 
二进制转六进制
10010101 => 149
149 ÷ 6 = 24 ~ 5
24 ÷ 6 = 4 ~ 0
4 ÷ 6 = 0 ~ 4
所以六进制为 405 => 5 * 6 0 + 0 * 6 1 + 4 * 6 2 = 5 + 0 + 144 = 149
 
负数的二进制
-29 的二进制 将正数部分的二进制先取反 再加 1 即为负数的二进制
00011101 => 取反 11100010 => 1 11100011

2.5 变量

指的是变化的量
变量的本质就是在内存中程序所处的进程中的一个临时存储区域
该区域的存储值有限制的
该区域值的变化必须是同类型的或向下兼容的
该区域有其自身的物理内存地址 - 指针
该区域中 存储值的限制 和 数据的变化类型 由 数据类型 来决定
该区域中 其空间的分配 和 空间的物理内存地址 由计算机底层来决定

 

2.6 数据类型

Java 当中,数据类型主要分为两大类:
 
1.基本数据类型:在变量的空间中存储数据
 
整型
byte 1 字节 2^8 256 -128~127 -2^7 ~ 2^7 - 1
short 2 字节 2^16 65536 -32768~32767 -2^15 ~ 2^15 - 1
int 4 字节
long 8 字节
浮点型
float 4 字节
double 8 字节
字符型
char 2 字节
布尔型
boolean 不确定
 
2.引用数据类型:数据是在堆内存中存储,变量仅仅存放的是数据在堆内存中的地址
 
字符串
数组
对象

 

2.7 运算符

算术运算符
 
算数运算
符号        含义                备注
+              加法              1+2=3 如果加号左右有字符串 则加号为连接符
-               减法              3-2=1
*               乘法              3*2=6
/                除法             3/2=1 3.0/2=1.5 如果除号两边都是整数 结果为整数;有小数 结果为小
%             取余              9%5=4 注意一点,如果前或后为负数怎办?
a++        后置自 增         a 自身加一,使用原来的值
++a       前置自 增          a 自身加一,使用加之后的值
a--        后置自 减           a 自身减一,使用原来的值
--a        前置自 减           a 自身减一,使用加之后的值

 

赋值运算符
赋值运算符        含义                              备注
+=               加法赋值                  a+=3 a=a+3 赋值运算符只能用在变量身上
-=                减法幅值
*=                乘法幅值
/=                除法幅值
%=              取余幅值
 
 
 
比较运算符
运算的结果为布尔类型
> 大于
< 小于
>= 大于等于
<= 小于等于
!= 不等于
逻辑运算符
& 单与
| 单或
^ 异或
!
&& 双与
|| 双或
位运算符
& 位与
| 位或
^ 位异或
>> 右移
<< 左移
 
三目运算符
数据类型 变量名 = 布尔表达式 ? 1 : 2 ;
int number = 10 % 2 == 0 ? 10 : 2 ;
补充:变量的交换问题:
int a = 3 ;
int b = 7 ;
方法一: 方法二:
方法三:

2.8 常见错误

未声明变量,未初始化变量而使用变量
 
整型溢出问题
 
取整错误
一个是小数的问题,小数主要去的是近似值 想要得到一个 0.5 这个值的话 有可能会得到 0.4999999
一个是整数的问题, 1/3 = 0.3333 * 3 = 0.99999 数学上 1
 
超出预期的除法问题
/ 左右两边是整数,结果为整数,如果出现小数则结果为小数
 
额外冗余的输入对象
 
 

3章 流程控制语句

3.1 if 条件语句
单分支 if 语句
 
... CodeA
if ( 布尔表达式 ) {
语句组 ;
}
... CodeB
双分支 if-else 语句
... CodeA
if ( 布尔表达式 ) {
语句组 A ;
} else {
语句组 B ;
}
.... CodeB
多分支 if-else-if 语句
... CodeA
if ( 布尔表达式 1 ) {
语句组 A ;
} else if ( 布尔表达式 2 ) {
语句组 B ;
} else if ( 布尔表达式 3 ) {
语句组 C ;
} else {
语句组 D ;
}
... CodeB
 
 
3.2 switch 分支语句
if 分支语句一样,都是对条件的判断。 switch 一般用在条件较多的情况下,但是有一个重要的细节
及时, if 语言可以对区间值或固定值进行判断, switch 只能对固定值进行判断。
 
switch ( 变量 ) {
case 1 : //if ( 变量 == 1) { 语句组 A;}
语句组 A ;
break ;
case 2 :
语句组 B ; break ;
...
case n : //if ( 变量 == n) { 语句组 N;}
语句组 N ;
default : // else { 语句组 N+1;}
语句组 N + 1 ;
break ;
}
 
switch 的一些使用细节
switch 所传入的变量, char byte short int String 或者枚举类型
1 ,值 2 ,一直到值 n ,这几个值必须是同一个数据类型的
当变量匹配的相关 case 的值的时候,执行 case 中的语句,直到遇到 break 结束;如果该 case 语句
中没有 break ,则继续向下执行,直到遇到另外一个 break 结束
 
3.3 for 循环语句
循环主要解决具有规律性的且具有重复性的代码问题,避免程序冗余
// 将一个数字所有位数拆开 相加
//number = 123
number % 10 = 3
number /= 10 12
number % 10 = 2
number /= 10 1
number % 10 = 1
number /=10 0
 
循环四要素
1 循环的初始化:循环的第 1 次执行从哪里开始
2 循环的继续条件:循环从当前轮是否向后执行下一轮
3 循环体:需要被循环执行的部分
4 循环的步长、周期:当前循环到下一轮循环之间的变化
我们常见的循环问题可以分为两大类:
已知循环次数的 一般用 for 语句做
未知循环次数但是已知循环结束条件 一般用 while 语句做
for ( 1 循环的初始化 ; 2. 循环的继续条件 ; 4. 循环的步长 ) {
3. 循环体
}
1 - 2 - 3 - 4 - 2 - 3 - 4 - 2 - 3 - 4 - 2 不满足则结束循环

 

3.4 while 循环语句
while 循环主要用于解决循环次数未知,但循环结束条件已知的情况。
while 其实和 for 循环是可以相互转换的,是因为都逃不开循环四要素
 
while 的语法格式
1. 循环的初始化
while ( 2. 循环继续条件 ) {
3. 循环体
4. 循环的步长、周期
}

 

3.5 break continue 跳转语句
break 在循环语句中叫做终止语句,终止的是 break 最近的一层循环
continue 在循环语句中叫做跳过语句,跳过本次循环开启下一轮循环
 
 
 
 
 
 
 

练习题

java
 

Applet 是一种在 Web 环境下,运行于客户端的Java程序组件。Applet 必须运行于某个特定的“容器”,这个容器可以是浏览器本身,也可以是通过各种插件,或者包括支持 Applet 的移动设备在内的其他各种程序来运行。与一般的Java应用程序不同,Applet 不是通过 main 方法来运行的。Applet运行之前,先调用 Init() 方法,然后调用 start() 方法,最后调用 paint() 方法。

BC项可以跳出一个返回值为boolean类型的函数里面的forEach。JS不可以使用break,原因是js中的forEach()无法在所有元素都传递给调用的函数之前终止遍历。也就是说,没有像for循环中使用的相应的break语句。如果要提前终止,必须把forEach()方法放在一个try块中,并能抛出一个异常。如果forEach()调用的函数抛出foreach.break异常,循环会提前终止

取余运算,结果的符号和被除数符号一致

&运算符:两个数都转为二进制,然后从两个数的最高位进行与运算,两个都为真(1),结果才为真(1),否则为假(0)

13:01101
17:10001
结果:00001,既为1

选择语句不进行循环

没有final修饰的变量相加后会被自动提升为int型,与目标类型byte不相容,需要强制转换(向下转型)

ResultSet跟普通的数组不同,索引从1开始而不是从0开始

1、加载JDBC驱动程序:
2、提供JDBC连接的URL   
3、创建数据库的连接   
4、创建一个Statement   
5、执行SQL语句   
6、处理结果   
7关闭JDBC对象 

A,java是强类型语言,所有的方法必须放在类里面,包括main

B ,java中可以有多个重载的main方法,只有public static void main(String[] args){}是函数入口

C,内部类的类名一般与文件名不同

D,函数都必须用{}括起来,不管是一条语句还是多条语句

被sataic声明的为静态方法,可以直接通过类名调用而不需要通过对象调用。

数组下标从0开始计算,所以是0-9,不能取到array.length

A,一个类只能有一个直接父类,但是继承是有传递性的。一个类可以实现多的接口。一个接口可以继承多个类。

B,接口中没有普通变量(普通成员变量),接口中都是常量,默认修饰符:public static final

C,JDK8之前,接口中的方法都是默认public abstract的,JDK8之后,接口中可以有static、default的修饰的方法,一旦被修饰,方法必须有方法体(抽象方法可是没有方法体的),接口中的方法都不能被private和protected修饰,同时外部接口、类只能被public修饰或者不写,但是内部接口、类可以被四个访问修饰符修饰。

D, 实现接口,其实就是需要重写接口中的abstract方法,一旦实现的类没有重写完,那么这个类必须是个抽象类(抽象类中可以没有抽象方法,但是有抽象方法的类必须是抽象类)。

 

构造方法的作用是对象初始化


char[] ch = new char[3];//默认空字符
int [] Int = new int[2];//默认0
String[] strings = new String[2];//默认null

既然是实现接口,就要实现接口的所以方法,相当于重写方法,方法的重写需要满足:三同一大一小(方法名、返回值类型、形参相同;访问权限>=重写前;抛出异常<=重写前)

substring    方法将返回一个包含从    start    到最后(不包含    end    )的子字符串的字符串

A Class类在java.lang包

B 动态代理技术可以动态创建一个代理对象,反射不行

C 反射访问私有成员时,Field调用setAccessible可解除访问符限制

D CGLIB实现了字节码修改,反射不行

E 反射会动态创建额外的对象,比如每个成员方法只有一个Method对象作为root,他不胡直接暴露给用户。调用时会返回一个Method的包装类

F 反射带来的效率问题主要是动态解析类,JVM没法对反射代码优化。

含有abstract关键字的方法是抽象方法,抽象方法没有方法体以分号结束,抽象类可不包含抽象方法但声明了抽象方法的类必须定义为抽象类,并且抽象类、接口都不可以实例化。子类可继承抽象父类或实现抽象父类当中的所有抽象方法(两种方法皆可)

A 基本数据类型包括byte,short,int,long,float,double,char,boolean,所以A错。
B,C语言当中是这样,java不是, String内部是用char[]数组实现的,不过结尾不用\0。
C 对,字符串内容比较用equals方法。
D char存储的unicode码,不进可以存储ascII码,汉字也可以

D  public可以被当前类,子类,包,其他包,访问,

protected 可以被当前类,子类,包访问

default可以被可以被当前类,包内访问;

private只能被当前类访问

B 是从 double 到 int 也就是从大范围到小范围,不会丢失精度。

A: 垃圾回收在jvm中优先级相当相当低。
B:垃圾收集器(GC)程序开发者只能推荐JVM进行回收,但何时回收,回收哪些,程序员不能控制。
C:垃圾回收机制只是回收不再使用的JVM内存,如果程序有严重BUG,照样内存溢出。
D:进入DEAD的线程,它还可以恢复,GC不会回收

1、自旋锁

2、自旋锁的其他种类

3、阻塞锁

4、可重入锁

5、读写锁

6、互斥锁

7、悲观锁

8、乐观锁

9、公平锁

10、非公平锁

11、偏向锁

12、对象锁

13、线程锁

14、锁粗化

15、轻量级锁

16、锁消除

17、锁膨胀

18、信号量

判断推理题

将①和②重合得到③,重点在于判断将正方形四分的两条线段是否连接正方形的四个顶点

两个关键:神经中枢病损 丧失

A 不是病损

B 听力受损导致发音缺陷,不是神经中枢的病损

C 只是有困难,不是丧失

由本题可推知,对作家没有真止的共鸣,对一个作家的了解就无从深入,A是本题的“逆否命题”,所以为正确答案。B、C、D是本题的“否命题”,由题目无法推山。

分子为从小到大排列的奇数,分母为从小到大排列的质数

 

 

智力题

设有n个老鼠,每个老鼠选择其中的n个瓶子喝药,

其中有1个瓶子n个老鼠都喝

其中有C(n,n-1)个瓶子有n-1个老鼠喝过

其中有C(n,n-2)个瓶子有n-2个老鼠喝过

。。。

其中有C(n,2)个瓶子只有2个老鼠喝过

有C(n,1)个瓶子只有1个老鼠喝过

假如最后有k个老鼠死掉了,那么根据这k个老鼠共同喝过那个瓶子的药,就知道那个瓶子有毒药了

所以n个老鼠,最大可以辨别C(N,N)+C(N,N-1)+C(N,N-2)+...C(N,1)=2^N-1

所以答案选B,10

 

 

数量关系

 

首先建立一个HashMap来映射符号和值,然后对字符串从左到右来,如果当前字符代表的值不小于其右边,就加上该值;否则就减去该值。以此类推到最左边的数,最终得到的结果即是答案

所求的最长公共前缀子串一定是每个字符串的前缀子串。所以随便选择一个字符串作为标准,把它的前缀串,与其他所有字符串进行判断,看是否是它们所有人的前缀子串。这里的时间性能是O(m*n*m)。

首先使用哈希表存储每个数字对应的所有可能的字母,然后进行回溯操作。

回溯过程中维护一个字符串,表示已有的字母排列(如果未遍历完电话号码的所有数字,则已有的字母排列是不完整的)。该字符串初始为空。每次取电话号码的一位数字,从哈希表中获得该数字对应的所有可能的字母,并将其中的一个字母插入到已有的字母排列后面,然后继续处理电话号码的后一位数字,直到处理完电话号码中的所有数字,即得到一个完整的字母排列。然后进行回退操作,遍历其余的字母排列。

回溯算法用于寻找所有的可行解,如果发现一个解不可行,则会舍弃不可行的解。在这道题中,由于每个数字对应的每个字母都可能进入字母组合,因此不存在不可行的解,直接穷举所有的解即可。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值