java笔试知识点(一)

**1.下面有关JVM内存,说法错误的是?**c
a程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的
b虚拟机栈描述的是Java方法执行的内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的
c方法区用于存储JVM加载的类信息、常量、静态变量、以及编译器编译后的代码等数据,是线程隔离的
d原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的
在这里插入图片描述
大多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区) ,Heap(堆) , Program Counter Register(程序计数器) , VM Stack(虚拟机栈,也有翻译成JAVA 方法栈的),Native Method Stack ( 本地方法栈 ),其中Method Area 和 Heap 是线程共享的 ,VM Stack,Native Method Stack 和Program Counter Register 是非线程共享的。为什么分为 线程共享和非线程共享的呢?请继续往下看。

首先我们熟悉一下一个一般性的 Java 程序的工作过程。一个 Java 源程序文件,会被编译为字节码文件(以 class 为扩展名),每个java程序都需要运行在自己的JVM上,然后告知 JVM 程序的运行入口,再被 JVM 通过字节码解释器加载运行。那么程序开始运行后,都是如何涉及到各内存区域的呢?

概括地说来,JVM初始运行的时候都会分配好 Method Area(方法区) 和Heap(堆) ,而JVM 每遇到一个线程,就为其分配一个 Program Counter Register(程序计数器) , VM Stack(虚拟机栈)和Native Method Stack (本地方法栈), 当线程终止时,三者(虚拟机栈,本地方法栈和程序计数器)所占用的内存空间也会被释放掉。这也是为什么我把内存区域分为线程共享和非线程共享的原因,非线程共享的那三个区域的生命周期与所属线程相同,而线程共享的区域与JAVA程序运行的生命周期相同,所以这也是系统垃圾回收的场所只发生在线程共享的区域(实际上对大部分虚拟机来说知发生在Heap上)的原因。
2.SPRING的事务传播特性,
Required:必须的。说明必须要有事物,没有就新建事物。supports:支持。说明仅仅是支持事务,没有事务就非事务方式执行。mandatory:强制的。说明一定要有事务,没有事务就抛出异常。required_new:必须新建事物。如果当前存在事物就挂起。not_supported:不支持事物,如果存在事物就挂起。never:绝不有事务。如果存在事物就抛出异常
3.servlet和cgi
4.jdbc
5.sleep()和wait()
6.==和equal()
7.异常,可看官方文档
https://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html
在这里插入图片描述
静态的include:是jsp的指令来实现的,<% @ include file=“xx.html”%> 特点是 共享request请求域,先包含再编译,不检查包含页面的变化。
动态的include:是jsp动作来实现的,<jsp:include page=“xx.jsp” flush=“true”/> 这个是不共享request请求域,先编译在包含,是要检查包含页面的变化的。
8.垃圾回收
A: 垃圾回收在jvm中优先级相当相当低。
B:垃圾收集器(GC)程序开发者只能推荐JVM进行回收,但何时回收,回收哪些,程序员不能控制。
C:垃圾回收机制只是回收不再使用的JVM内存,如果程序有严重BUG,照样内存溢出。
D:进入DEAD的线程,它还可以恢复,GC不会回收
9.Statement、PreparedStatemen、CallableStatement
Statement 每次执行sql语句,数据库都要执行sql语句的编译 ,最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement.

PreparedStatement是预编译的,使用PreparedStatement有几个好处

a. 在执行可变参数的一条SQL时,PreparedStatement比Statement的效率高,因为DBMS预编译一条SQL当然会比多次编译一条SQL的效率要高。

b. 安全性好,有效防止Sql注入等问题。

c. 对于多次重复执行的语句,使用PreparedStament效率会更高一点,并且在这种情况下也比较适合使用batch;

d. 代码的可读性和可维护性。

CallableStatement接口扩展 PreparedStatement,用来调用存储过程,它提供了对输出和输入/输出参数的支持。CallableStatement 接口还具有对 PreparedStatement 接口提供的输入参数的支持。
10.注意数据类型的大小写
11.Linux删除文件
a. rm -rf 目录名字
b.rmdir 文件夹名
12.Java的静态方法属于类的成员,实例方法属于对象的成员。
13、 请简单回答数据库中union 和 union all 的区别。
union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
union All:对两个结果集进行并集操作,包括重复行,不进行排序;
14、错排
M(n) = (n-1) * [ M(n-2) + M(n-1) ]
15.Linux
linux操作系统中,文件myfile的文件权限为rw-rw-rw-,修改文件myfile的权限为本用户和相同组的用户有读写权限,而其他用户只有读的权限的命令是chmod 664 myfile
16.group by
使用group by子句时,必须满足下面的一些原则:

l 在select子句的后面,只能有两种类型的表达式,一种是组函数,一种是出现在group by子句后面的列名。

l 没有出现在group by子句后面的列名不能出现在select子句中非组函数表达式中,但是出现在group by子句后面的列名可以不出现在select子句中非组合函数表达式中。

l 如果使用了where子句,那么所有参加分组计算的数据必须首先满足where子句指定的条件。

l 在默认情况下,系统按照group by子句中指定的列升序排列,但是可以使用order by子句指定新的排列顺序。

使用group by 常见的错误:

l 如果在select语句中没有出现group by子句,那么不能在select子句中同时出现单个列名和组函数的混合现象。

l 如果希望限制分组中的数据,那么可以使用having子句而不能使用where子句。即having中可以出现组函数而where不能出现组函数。

组函数:
avg 求平均值
count 计算有多少条数据
max 最大值
min 最小值
sum 求和

    stddev    标准差
    variance  方差

17java中ReetrantLock的非公平性是如何实现的?有什么意义?
18多态
同一个事件发生在不同的对象上会产生不同的结果。
19.不能在子查询中包含Order By 子句
从逻辑上说,order by 应该是查询过程的最后一步,order by子句只能对最终查询结果排序
如果子查询的结果为空,那么外查询条件始终不会成立

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值