20170922深圳长亮笔试

SQL语言包括数据定义、数据操纵(Data Manipulation),数据控制(Data Control)
数据定义:Create Table,Alter Table,Drop Table, Craete/Drop Index等
数据操纵:Select ,insert,update,delete,
数据控制:grant,revoke

现在来看看MySQL数据库为我们提供的四种隔离级别:
  ① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
  ② Repeatable read (可重复读):可避免脏读、不可重复读的发生。
  ③ Read committed (读已提交):可避免脏读的发生。
  ④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。

dd:删除游标所在的一整行(常用)
ndd:n为数字。删除光标所在的向下n行,例如20dd则是删除光标所在的向下20行
d1G:删除光标所在到第一行的所有数据
dG:删除光标所在到最后一行的所有数据
d$:删除光标所在处,到该行的最后一个字符
d0:那个是数字0,删除光标所在到该行的最前面的一个字符
x,X:x向后删除一个字符(相当于[del]按键),X向前删除一个字符(相当于[backspace]即退格键)
nx:n为数字,连续向后删除n个字符

使用ObjectOutputStream类完成对象存储,使用ObjectInputStream类完成对象读取
对象序列化的所属类需要实现Serializable接口

如果希望TCP监听9000端口,那么
new的应该是serversocket
ServerSocket(int port) 是服务端绑定port端口,调accept()监听等待客户端连接,它返回一个连接队列中的一个socket。
Socket(InetAddress address , int port)是创建客户端连接主机的socket流,其中InetAddress是用来记录主机的类,port指定端口。

下面程序的运行结果:()

public static void main(String args[]) {
        Thread t=new Thread(){
        public void  run(){
            dianping();

        }
    };
    t.run();
    System.out.print("dazhong");
    }
    static void dianping(){
        System.out.print("dianping");
}

如果调用run() 选b
如果调用start() 选c
因为调用start后并不保证线程启动的顺序

这里写图片描述

响应正文输入输出流方法
响应正文输入输出流有如下两个方法,这两个方法相互排斥,只能调用其一。
1) ServletResponse.getOutputStream
返回一个ServletOutputStream对象,实现字节流的输出,它可以直接输出字节数组中的二进制数据。

2) ServletResponse.getWriter
返回一个PrintWriter对象,可以直接输出字符内容,所以,它专用于输出内容为文本字符的网页。
在使用这两个方法进行响应消息输出前,最好先对指定响应内容的MIME类型的Cintent-Type头字段进行设置。

如何选择使用这两个方法
1) PrintWriter在输出字符文本时内部需要将字符串转换成某种字符集编码的字节数组,使用他的好处就是不需要自己来完成从字符串到字节数组的转换。转换的字符集编码是通过设置setContentTpye或setCharacterEncoding或setLocale等方法实现的。
2) 使用ServletOutputStream对象直接从一个字节输入流中读取出来,然后再原封不动的输出到客服端,这时候如果采用PrintWriter对象输出,还需要将字节数组读入到程序中,在读取时候还要牵涉到字节到字符的编码转换过程,这样造成效率问题,且易出错。

注意的一些细节
1) 多次调用PrintWriter和ServletOutputStream返回的都是同一个PrintWriter对象或ServletOutputStream对象
2) PrintWriter.print和PrintWriter.println的区别在于后者相当于多输出一个
换行标志

只想滚动遍历结果集,而不想编辑数据
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
获得可更新的结果集
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

在Java web开发中,如果某个数据需要跨多个请求存在,则数据应该存储在request中。

JVM是Java Virtual Machine(Java 虚拟机 )的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
简单来看,虚拟机本质就是一个进程。模拟平台操作的一个进程。

jdk是Java语言的软件开发工具包
jre运行程序所必须的环境的集合,包含jvm标准实现及Java核心类库。
Java是先编译后解释,Java源码先通过编译生成一种特殊的.class的中间字节码文件,然后再由jvm进行解释运行。
jvm是一种用于计算设备的规范,通过在实际的计算机上仿真各种计算机功能。

以下代码的输出的结果为

public class Demo1 {

    public static void main(String[] args) {
        double a=2.0,b=1.1,c=0.9;
        if(a-b==c)
            System.out.println("ok");
        else
            System.out.println("bu ok");
    }

}

答案:bu ok
double的加减乘除都有误差。

Session的生命周期
  以前在学习的时候没怎么注意,今天又回过头来仔细研究研究了一下Session的生命周期。
  Session存储在服务器端,一般为了防止在服务器的内存中(为了高速存取),Sessinon在用户访问第一次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。
  Session什么时候失效?

  1. 服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为20分钟。
  2. 调用Session的invalidate方法。

  Session对浏览器的要求:
  虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。

设计模式将抽象部分与它的实现部分相分离:桥接模式

1.桥接模式产生原因:同一个类型,有两个变化的维度(两个维度的抽象:一个抽象部分的抽象,一个实现部分的抽象)
Bridge模式是一种抽象与其实现相分离的模式。它主要应用于:当事物是一组变化量,和对这些事物的操作方法(实现)也是一组变化量的情况,也就是说它们都是多变的。
2.组合模式(Composite)属于结构性模式,它描述了对象间的组合关系。对象间常常通过树结构来组织(包含)起来,以实现整体-部分的层次结构。
3.Facade 外观模式,是一种结构型模式,它主要解决的问题是:组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。
4.单例 模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。

如果在一个浮点数后面加上“F” 或者”f”时,表示的就是单精度浮点型数据,否则,系统会认为是双精度浮点型数据。
意思就是float a=2.0; 2.0默认为double,因此会出错。
基本数据类型的范围:
byte的取值范围为-128~127,占用1个字节(-2的7次方到2的7次方-1)
short的取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1)
int的取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1)
long的取值范围为(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1)

可以看到byte和short的取值范围比较小,而long的取值范围太大,占用的空间多,基本上int可以满足我们的日常的计算了,而且int也是使用的最多的整型类型了。
在通常情况下,如果JAVA中出现了一个整数数字比如35,那么这个数字就是int型的,如果我们希望它是byte型的,可以在数据后加上大写的 B:35B,表示它是byte型的,同样的35S表示short型,35L表示long型的,表示int我们可以什么都不用加,但是如果要表示long型的,就一定要在数据后面加“L”。

浮点型
float和double是表示浮点型的数据类型,他们之间的区别在于他们的精确度不同
float 3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方)占用4个字节
double 1.797693e+308~ 4.9000000e-324 占用8个字节
double型比float型存储范围更大,精度更高,所以通常的浮点型的数据在不声明的情况下都是double型的,如果要表示一个数据是float型的,可以在数据后面加上“F”。
浮点型的数据是不能完全精确的,所以有的时候在计算的时候可能会在小数点最后几位出现浮动,这是正常的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值