考点2 JVM参数

假如某个JAVA进程的JVM参数配置如下:
-Xms1G
-Xmx2G
-Xmn500M
-XX:MaxPermSize=64M
-XX:+UseConcMarkSweepGC
-XX:SurvivorRatio=3
请问eden区最终分配的大小是多少?

解析

-Xmx2G:设置JVM最大可用内存为2G
-Xms1G:设置JVM促使内存为1G。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn500M:设置年轻代大小为500M

整个JVM内存大小=年轻代大小+年老代大小 + 持久代大小。

新生代中又会划分为 Eden 区,from Survivor区、to Survivor 区。

其中 EdenSurvivor 区的比例默认是 8:1:1,当然也支持参数调整
-XX:SurvivorRatio=3的话就是3:1:1

故该题为500*(3/5)=300M.

考点3 多线程 多进程

关于多线程和多进程,下面描述正确的是():

  • A 多进程里,子进程可获得父进程的所有堆和栈的数据;而线程会与同进程的其他线程共享数据,拥有自己的栈空间。
  • B 线程因为有自己的独立栈空间且共享数据,所有执行的开销相对较大,同时不利于资源管理和保护。
  • C 线程的通信速度更快,切换更快,因为他们在同一地址空间内。
  • D 一个线程可以属于多个进程。
正确答案: AC

解析

1、一个线程只能属于一个进程 ,而一个进程可以有多个线程,但至少有一个线程(通常说的主线程)。
2、资源分配给进程 ,同一进程的所有线程共享该进程的所有资源。
3、线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
5、线程是指进程内的一个执行单元,也是进程内的可调度实体。
6、同一个进程下的多个线程之间可以共享数据,因此 开销较小

考点4 基本类型占字节数

java有8种基本类型,请问byteintlongcharfloatdoubleboolean各占多少个字节?

正确答案: 1 4 8 2 4 8 1

解析

基本数据类型 占用空间
byte 占一个字节
short 占两个字节
int 占四个字节
long 占八个字节
float 占四个字节
double 占八个字节
char 占两个字节
boolean 占一个字节

考点5 运算符优先级

表达式(short)10/10.2*2运算后结果是什么类型?

  • A short
  • B int
  • C double
  • D float
正确答案: C

解析

  • 强制类型转换运算符的优先级比算数运算符要高,所以先进行强制类型转换,也就是(short)只对最近的10有转换效果。
  • 浮点数默认数据类型为double

考点6 导致线程中断或停止运行的情况

下列哪些情况下会导致线程中断或停止运行( )

  • A InterruptedException异常被捕获
  • B 线程调用了wait方法
  • C 当前线程创建了一个新的线程
  • D 高优先级线程进入就绪状态

正确答案: AB

解析

A选项正确,Java中一般通过interrupt方法中断线程
B选项正确,线程使用了wait方法,会强行打断当前操作,进入阻塞(暂停)状态,然后需要notify方法或notifyAll方法才能进入就绪状态
C选项错误,新创建的线程不会抢占时间片,只有等当前线程把时间片用完,其他线程才有资格拿到时间片去执行。
D选项错误,调度算法未必是剥夺式的,而准备就绪但是还没有获得CPU,它的权限更高只能说明它获得CPU被执行的几率更大而已

考点1 Integer与int的区别

Integerint的区别

  • intjava提供的8种原始数据类型之一
  • Integerjavaint提供的封装类
  • int的默认值为0
  • Integer的默认值为null

考点3 一维数组的初始化

只有在定义数组的同时执行数组初始化才支持使用简化的静态初始化。

题目省略
定义一维数组的语句

解析

Java一维数组有两种初始化方法
1、静态初始化
int array[] = new int[]{1,2,3,4,5};
或者简写为:
int array[] = {1,2,3,4,5}
需要注意的是,写成如下形式也是错误的
int array[] = new int[5]{1,2,3,4,5}
2、动态初始化

1
2
3
int array[] = new int[2];
array[0] = 1;
array[1] = 2;

静态与动态初始化的区别就在于,前者是声明的时候就初始化,后者是先声明,再动态初始化。

声明的时候不能初始化容量,只有new的时候才可以。
也就是说

1
int a[10];

这种写法是错误的

考点4 可以追加文件的IO流

以下哪个I/O类可以附加或更新文件

  • A RandomAccessFile()
  • B OutputStream()
  • C DataOutputStream()
  • D None of the above

正确答案:

展开/折叠
A

解析

  • OutputStream()DataOutputStream()类都需要实例化FileOutputStream()对象,并在参数里加true后才能对文件追加内容;
  • RandomAccessFile()可以通过文件指针向文件末尾追加内容。

考点5 WebService

下面有关WebService的描述,错误的是?

  • A WebService是跨平台,跨语言的远程调用技术
  • B WebService通信机制实质就是JSON数据交换
  • C WebService采用了SOAP协议(简单对象协议)进行通信
  • D WSDL是用于描述 Web Services 以及如何对它们进行访问

正确答案: B

解析

  • Webservice是跨平台,跨语言的远程调用技术;
  • 它的通信机制实质就是xml数据交换;
    • JSON是轻量级的
    • XML是重量级的。XML具有跨平台,适合大量解析数据,目前webService主流是XML
  • 它采用了soap协议(简单对象协议)进行通信
  • WSDL 指网络服务描述语言 (Web Services Description Language)。WSDL 是一种使用 XML 编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或方法)

考点6 final修饰符

下列说法正确的是()

  • A finaljava中的修饰符,可以修饰类、接口、抽象类、方法和属性
  • B final修饰的类肯定不能被继承
  • C final修饰的方法不能被重载
  • D final修饰的变量不允许被再次赋值
正确答案: AC

解析

  • final修饰的类不能被继承或者实现,抽象类用于给子类继承的,接口是用来给实现类实现的。
    • 所以final不可以修饰抽象类,不能修饰接口
  • final修饰的方法不能被子类重写,但是可以重载。
  • final修饰的变量只能赋值一次

考点7 抽象

题目省略

  • 抽象类可以没有抽象方法,
  • 但是包含抽象方法的类必须是抽象类。

考点8 面向对象三个基本特征

判断题:
面向对象程序设计语言的三个基本特征是 封装继承多态

答案 正确

解析

  • 这里说的是 三个 基本特征。所以是封装,继承,多态。
  • 如果说的是 4个 基本特征。就是封装,继承,多态,抽象。

考点10 异常处理

判断题
捕获到的异常只能在当前方法中处理,不能在其他方法中处理

答案 错误
解析

捕获到的异常 不仅可以在当前方法中处理,还 可以将该异常抛给调用它的上一级方法来处理

考点11 访问控制符

哪个修饰符可以使在一个类中定义的成员变量只能被同一包中的类访问?
正确答案: 无修饰符

解析

展开/折叠

私有 只能在当前类内访问。
默认 可以在当前类内,或者相同包内访问到
保护 可以在当前类内,相同包内,子类访问到。
公共,可以在任意地方访问到

问题12 接口默认修饰符

题目省略

展开/折叠
  • 接口中的变量默认是public static final修饰的,
  • 接口中的方法默认是public abstract修饰的

考点13 运行时常量池

关于运行时常量池,下列哪个说法是正确的

  • A 运行时常量池大小受栈区大小的影响
  • B 运行时常量池大小受方法区大小的影响
  • C 存放了编译时期生成的各种字面量
  • D 存放编译时期生成的符号引用

正确答案: BCD

解析

运行时常量池(Runtime Constant Pool)是 方法区的一部分。所以,运行时常量池受方法区大小的影响
Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池(Constant Pool Table), 常量池用于存放编译器生成的各种字面量和符号引用 ,常量池中的内容将在类加载后存放到方法区运行时常量池中。

2019年10月28日Linux专项练习

考点1:Linux给文件添加执行权限的命令

为脚本程序指定执行权限命令的参数为

  • A chmod +x filename.sh
  • B chown +x filename.sh
  • C chmod +w filename.sh
  • D chown +r filename.sh
显示答案/隐藏答案正确答案: A

解析

  • chmod拆开是change modify修改之意,
  • chown拆开是change own修改拥有者之意

考点2:Linux crontab

Linux crontab*****/usr/local/run.sh这句话5个*号分别代表什么?

  • A 分钟 小时 日 月 星期
  • B 秒 分钟 小时 日 月
  • C 秒 分钟 小时 日 星期
  • D 分钟 小时 日 月 年
显示答案/隐藏答案正确答案: A

解析

crontabUnixLinux用于 设置周期性被执行的指令 ,是互联网很常用的技术,很多任务都会设置在crontab循环执行,如果不使用crontab,那么任务就是常驻程序

分时日月周(分食日月粥)

crontab基本格式 :

1
* * * * * command

第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

查看crontab cat /etc/crontab

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

[root@localhost ~]#

考点3:arp协议

arp协议用了()

  • A broadcast
  • B multicast
  • C unicast
  • D 以上选项都不正确
显示答案/隐藏答案正确答案: A

解析

  • arp(address resolution protocol)是地址解析协议,arp协议发的都是广播包
  • unicast:单播,
  • multicast:多播,
  • broadcast:广播。

考点4:kill命令

你尝试登出时收到一个错误消息,显示你还有任务未完成,你需要使用下面哪个命令?

  • A kill PID-of-the-process
  • B kill job-number-of-process
  • C kill
  • D kill PID-of-the-last-command
显示答案/隐藏答案正确答案: A

解析

  • kill pid 让进程正常退出
  • kill %job number 直接杀掉进程

考点5:shell脚本的命令行参数

如何获取上一条命令执行的返回码

  • A $!
  • B $0
  • C $?
  • D $#
显示答案/隐藏答案正确答案: C

解析

变量 描述
$0 脚本启动名(包括路径)
$n 第n个参数,n=1,2,…9
$* 所有参数列表(不包括脚本本身)
$@ 所有参数列表(独立字符串)
$# 参数个数(不包括脚本本身)
$$ 当前程式的PID
$! 执行上一个指令的PID
$? 执行上一个指令的返回值

考点6:clone和fork的区别

下列关于 clone 和 fork 的区别描述正确的有?

  • A clone和fork最大不同在于fork不再复制父进程的栈空间,而是自己创建一个新的。
  • B clone和fork最大不同在于clone不再复制父进程的栈空间,而是自己创建一个新的。
  • C clone是fork的升级版本,不仅可以创建进程或者线程,还可以指定创建新的命名空间(namespace)、有选择的继承父进程的内存、甚至可以将创建出来的进程变成父进程的兄弟进程等等
  • D fork是clone的升级版本,不仅可以创建进程或者线程,还可以指定创建新的命名空间(namespace)、有选择的继承父进程的内存、甚至可以将创建出来的进程变成父进程的兄弟进程等等
显示答案/隐藏答案正确答案: C

解析

fork()函数复制时将父进程的所有资源都通过复制数据结构进行了复制,然后传递给子进程,所以fork()函数不带参数;
clone()函数则是将部分父进程的资源的数据结构进行复制, 复制哪些资源是可选择的 ,这个可以通过参数设定,所以clone()函数带参数,没有复制的资源可以通过指针共享给子进程。

  • fork()是全部复制
  • vfork()是共享内存
  • clone()是可以将父进程资源有选择地复制给子进程,而没有复制的数据结构则通过指针的复制让子进程共享,具体要复制哪些资源给子进程,由参数列表中的clone_flags来决定。另外,clone()返回的是子进程的pid。

考点7:tar打包命令

在linux中用使用tar命令将文件aaa打包为bak.tar。

  • A tar -cf bak.tar aaa
  • B tar -xf bak.tar aaa
  • C tar -czf bak.tar aaa
  • D tar -rf bak.tar aaa
显示答案/隐藏答案正确答案: A

解析

tar解压缩命令

语法:tar [主选项+辅选项] 文件或者目录
使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用。

主选项

主选项 描述
-c 创建的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。相当于打包。
-x 从档案文件中释放文件。相当于拆包。
-t 列出档案文件的内容,查看已经备份了哪些文件。
特别注意,主选项c,x,t仅能存在一个!不可同时存在!因为不可能同时压缩与解压缩

辅助选项

辅助选项 描述
-z 是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩或解压?一般格式为xx.tar.gz或xx. tgz
-j 是否同时具有 bzip2 的属性?亦即是否需要用 bzip2压缩或解压?一般格式为xx.tar.bz2
-v 压缩的过程中显示文件!这个常用
-f 使用档名,请留意,在f之后要立即接档名喔!不要再加其他参数!
-p 使用原文件的原来属性(属性不会依据使用者而变)

考点8:进程间通信的方式

Unix系统中,哪些可以用于进程间的通信?()

  • A Socket
  • B 共享内存
  • C 消息队列
  • D 信号量
显示答案/隐藏答案正确答案: ABCD

解析

Linux进程间通信

  • 管道、
  • 信号、
  • 消息队列、
  • 共享内存、
  • 信号量、
  • 套接字(socket)

Windows进程间通信

  • 管道、
  • 消息队列、
  • 共享内存、
  • 信号量(semaphore)、
  • 套接字(socket)

Linux线程间通信

  • 互斥量(mutex),
  • 信号量,
  • 条件变量

Windows线程间通信

  • 互斥量(mutex),
  • 信号量(semaphore)、
  • 临界区(critical section)、
  • 事件(event)

题目1

数据库的基本特点是:

  1. 数据结构化
  2. 数据的共享性高,冗余度低,易扩充
  3. 数据独立性高
  4. 数据由DBMS统一管理和控制

题目2

在课程表中要查找课程名称中包含“计算机”课程,对应“课程名称”字段的正确准则表达式是什么。
答:

1
like "%计算机%";

题目3

E-R图中,联系用什么符号表示
答:菱形

解析

E-R图中

  • 矩形表示实体型
  • 椭圆表示实体的属性;
  • 菱形表示实体型之间的联系

题目4

实体是信息世界中的术语,与之对应的数据库术语是什么
答:记录

解析

  • 一个实体对应一条记录,或一个元组;
  • 一个属性对应一个数据项,或一个字段

题目5

当局部E-R图合并成全局E-R图时可能出现那些冲突
答:局部E-R图之间的冲突主要有三类:

  • 属性冲突、
  • 命名冲突,
  • 结构冲突。

题目6

SQL 基本表的创建中是通过哪个子句实现实体完整性规则的
答:主键子句

解析

实体完整性是对关系中的记录唯一性,准确来说实体完整性是指关系中的主属性值不能为Null且不能有相同值
定义表中的所有行能唯一的标识,一般用主键子句

题目7

数据库管理系统(DBMS)是哪一个级别的软件。
答:系统软件

解析

系统软件是和硬件直接相关联的,没有系统软件,计算机就没有办法正常运行。包括:

  • 操作系统、
  • 语言处理程序、
  • 标准库程序、
  • 服务型程序、
  • 数据库管理系统、
  • 计算机网络软件

题目8

从关系中挑选出指定的元组组成新关系的运算叫什么
答:”选取”运算

题目9

省略
外键的取值只允许等于所参照关系中某个主键值或者为空

题目10

授权语句格式:

1
grant 权限 on 表 to 用户

题目11

题目略

解析

实体完整性参照完整性适用于任何关系型数据库系统,它主要是针对关系的主关键字和外部关键字取值必须有效而做出的约束。
用户定义完整性 (user defined integrity)则是根据应用环境的要求和实际的需要,对某一具体应用所涉及的数据提出约束性条件。这一约束机制一般不应由应用程序提供,而应有由关系模型提供定义并检验
用户定义完整性主要包括字段有效性约束记录有效性

问题1

在一个关系R中,若每个数据项都是不可再分割的,那么R一定属于
答案:第一范式

问题2

在SQL语言中的视图VIEW是数据库的
外模式

问题3

SQL语言的功能有

  1. 数据定义、
  2. 数据操纵、
  3. 数据控制

问题3

设关系R和S的属性个数分别为r和s,则(R×S)操作结果的属性个数是什么
答案:x+y

解析:

笛卡尔乘积X×Y结果的属性个数等于x+y,结果的元组个数等于x*y.

题目4

SQL基本表的创建中是通过哪个子句实现参照完整性规则的

  • 主键 实现 实体完整性约束
  • 外键 实现 参照完整性约束

题目5

题目省略
答:SQL是非过程化的语言

题目6

SQL语言具有两种使用方式,一个称为交互式SQL ,还有一个是什么
答:嵌入式SQL

解析

  • 交互式是通过命令行或者客户端工具操作数据库的方式。
  • 嵌入式是高级语言操作数据库的方式,高级语言编程时使用。

题目7

下列回收授权的语句正确的是:

解析

回收授权语句格式如下:

1
revoke 权限 onfrom 用户

再结合题意即可得到正确的回收授权语句

题目8

题目略,

解析

数据库范式

  • 第一范式,关系模式的所有属性均为简单属性,即属性不可再分
  • 第二范式,若关系模式属于第一范式,并且每个非主属性都完全依赖于关系模式的码。即**消除非主属性部分依赖**。
  • 第三范式,若关系模式属于第二范式,并且每个非主属性都不传递依赖于候选码。即消除非主属性对码的传递依赖

题目9

SQL中,删除视图用什么命令
答:

1
drop view 视图名;

ACID

原子性Atomicity

事务的原子性是指事务中包括的所有操作要么都做,要么都不做

一致性Consistency

事务前后数据的完整性必须保持一致。事务必须是使数据库从一个一致性状态变到另一个一致性状态

隔离性Isolation

一个事务内部的操作及使用的数据对并发的其他事务是隔离的

持久性Durability

事务一旦提交,对数据库的改变是永久的,接下来即使数据库发生故障也不应该对其有任何影响

like模式匹配的通配符

  • 通配符%匹配的是任意字符,也就是0个或者0个以上的字符
  • 通配符_匹配的是任意一个字符。

在关系模型中 起导航数据作用的是

答案: 关键码

自然连接的条件

关系R和S进行自然连接时,要求R和S含有一个或多个公共的属性

DTS 数据转换服务 Data Transformation Services 介绍

DTS 是一组数据转换工具,您可以用来在一个或多个数据源之间进行不同类型数据的导入、导出和转换。
这里的数据源数据库或类似数据库的东西,例如(Microsoft SQL Server,Microsoft Excel,Microsoft Access,MySQL,Oracle).

数据库的数据项之间和记录之间都存在联系

范式相关的东西我还不知道

SQL查询中的where子句中不能有聚集函数

  • where子句用于选出满足条件的行.
  • having子句用于选出满足条件的列。
  • 聚集函数用于统计结果表中的所有的列上的数据,这要求先要确定表中有多少行,
    • 也就是聚集函数需要放在where子句之后,聚集函数不能放在where子句之中.
    • 聚集函数可以用在having子句中,也可以放在select子句之中.

数据库系统的独立性是指

不会因为系统数据存储结构与数据逻辑结构的变化而影响应用程序

数据库恢复的基础是利用转储的冗余数据 这些转储的冗余数据包括

日志文件、数据库后备副本

问题: 下列关于数据库设计的叙述中 正确的是

在需求分析阶段建立数据字典

解析

数据字典是在需求分析阶段建立,在数据库设计过程中不断修改、充实和完善的。

完整的数据库设计步骤

按照规范的设计方法,一个完整的数据库设计一般分为以下六个阶段:
需求分析:分析用户的需求,包括数据、功能和性能需求;
概念结构设计:主要采用E-R模型进行设计,包括画E-R图;
逻辑结构设计:通过将E-R图转换成表,实现从E-R模型到关系模型的转换;
数据库物理设计:主要是为所设计的数据库选择合适的存储结构和存取路径;
数据库的实施:包括编程、测试和试运行;
数据库运行与维护:系统的运行与数据库的日常维护。

事务的隔离性是指

一个事务内部的操作及使用的数据对并发的其他事务是隔离的

对关系模型叙述正确的是

  • 关系模型建立在严格的数学理论集合论谓词演算公式的基础之上
  • 微机DBMS绝大部分采取关系数据模型
  • 用二维表表示关系模型是其一大特点

全局E-R模型的设计,需要消除属性冲突、命名冲突和

结构冲突

解析

当将局部的E-R图集成为全局E-R图时,可能存在3类冲突。

  1. 属性冲突:包括类型、取值范围、取值单位的冲突;
  2. 结构冲突:例如同一对象在一个局部E-R图中作为实体,而在另一个局部E-R图中作为属性,同一实体在不同的E-R图中的属性个数和类型不同等;
  3. 命名冲突:包括实体类型名、联系类型名之间异名同义,或同名异义等

group by中的all关键字说明

Transact-SQLgroup by 子句中提供 all 关键字。

必须有where子句才能在group by子句中使用all关键字

只有在select语句还包括where子句时,all 关键字才有意义。

添加all时where则不起作用

如果使用all关键字,那么查询结果将包括由group by子句产生的所有组,即使某些组没有符合where的条件

没有all时where起作用

没有all关键字,包含group by子句的select语句将不显示没有符合条件的行的组。

LeetCode刷题 [9] 回文数

思路:逆序这个整数,然后和该整数比较

解法2: 使用StringBuilder的reverse方法逆序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package leetcode1_10;
/**
* @author francis
* create at 2019/9/17-19:43
*/
public class LeetCode9_2 {
public boolean isPalindrome(int x) {
// 转成字符串
String xStr = String.valueOf(x);
// 逆序字符串
String reverseStr = new StringBuilder(String.valueOf(x)).reverse().toString();
return xStr.equals(reverseStr);
}

public static void main(String[] args) {
int[] testArr = {123, 121, 111, 1000, 12321, 2332};
LeetCode9_2 leetCode9_2=new LeetCode9_2();
for (int i = 0; i < testArr.length; i++) {
System.out.println(testArr[i]+" 是回文数:"+leetCode9_2.isPalindrome(testArr[i]));
}

}
}

优点:代码量少

解法3: 通过数学运算逆序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/*
* @lc app=leetcode.cn id=9 lang=java
*
* [9] 回文数
*/
class Solution {
/**
* 判断是否是回文数.
*
* @param x 一个整数.
* @return
*/
public boolean isPalindrome(int x) {
// 如果是小数,则不是回文数
// 如果是10的倍数,也不是回文数
if (x < 0 && (x % 10 == 0)) {
return false;
}
// 逆序这个正整数
int reverse = getReverse(x);
// 如果逆序后还和原来的数相等的话就是回文数
return reverse == x;
}

/**
* 逆序正整数.
*
* @param positiveInteger 正整数.
* @return 该正整数逆序后的结果.
*/
private int getReverse(int positiveInteger) {
int reverseInteger = 0;
while (positiveInteger > 0) {
// 将当前数字左移一位,然后加上个位数
reverseInteger = reverseInteger * 10 + positiveInteger % 10;
// 右移删除掉当前的个位数
positiveInteger = positiveInteger / 10;
}
return reverseInteger;
}
}