Java基础笔试

Java基础

修饰符访问权限

| ** 修饰符** | ** 同类** | ** 同包** | ** 子类** | ** 其他包** | | :---: | :---: | :---: | :---: | :---: | | public | √ | √ | √ | √ | | protected | √ | √ | √ | × | | default | √ | √ | × | × | | private | √ | × | × | × |

Servlet和CGI

CGI(Common Gateway Interface),通用网关接口

通用网关接口,简称CGI,是一种根据请求信息动态产生回应内容的技术。通过CGI,Web 服务器可以将根据请求不同启动不同的外部程序,并将请求内容转发给该程序,在程序执行结束后,将执行结果作为回应返回给客户端。也就是说,对于每个请求,都要产生一个新的进程进行处理。因为每个进程都会占有很多服务器的资源和时间,这就导致服务器无法同时处理很多的并发请求。另外CGI程序都是与操作系统平台相关的,虽然在互联网爆发的初期,CGI为开发互联网应用做出了很大的贡献,但是随着技术的发展,开始逐渐衰落。

Servlet

Servlet最初是在1995年由James Gosling 提出的,因为使用该技术需要复杂的Web服务器支持,所以当时并没有得到重视,也就放弃了。后来随着Web应用复杂度的提升,并要求提供更高的并发处理能力,Servlet被重新捡起,并在Java平台上得到实现,现在提起Servlet,指的都是Java Servlet。Java Servlet要求必须运行在Web服务器当中,与Web服务器之间属于分工和互补关系。确切的说,在实际运行的时候Java Servlet与Web服务器会融为一体,如同一个程序一样运行在同一个Java虚拟机(JVM)当中。与CGI不同的是,Servlet对每个请求都是单独启动一个线程,而不是进程。这种处理方式大幅度地降低了系统里的进程数量,提高了系统的并发处理能力。另外因为Java Servlet是运行在虚拟机之上的,也就解决了跨平台问题。如果没有Servlet的出现,也就没有互联网的今天。

在Servlet出现之后,随着使用范围的扩大,人们发现了它的一个很大的一个弊端。那就是 为了能够输出HTML格式内容,需要编写大量重复代码,造成不必要的重复劳动。为了解决这个问题,基于Servlet技术产生了JavaServet Pages技术,也就是JSP。Servlet和JSP两者分工协作,Servlet侧重于解决运算和业务逻辑问题,JSP则侧重于解决展示问题。 Servlet与JSP一起为Web应用开发带来了巨大的贡献,后来出现的众多Java Web应用开发框架都是基于这两种技术的,更确切的说,都是基于Servlet技术的。

Servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁。

而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于Servlet 。

volatile和synchronized

` volatile` 关键字用于修饰变量,它的作用是确保多个线程之间对该变量的访问具有可见性和有序性。

synchronized 关键字用于给对象、方法或者代码块加互斥锁,同时只有一个线程可以访问

  • 修饰非static方法时,锁住this对象
  • 修饰static方法,锁住class类

区别

validate是线程同步的轻量级实现,所以性能更好。

validate只能修饰变量,synchronized的功能强大得多。

多线程访问validate不会阻塞,但是synchronized会。

validate保证数据的可见性,但是不能保证原子性;synchronized可以保证原子行操作,也可以间接地保证数据的可见性,因为它串行化线程,让私用内存和公共内存中的数据同步。

编译和运行命令

+ 编译:javac 类名.class + 运行:java 类名

取模运算%

结果符号同被除数符号相同

Vector和ArrayList

vector:底层和Arraylist同为数组,但是是线程安全的,可自动扩容。是一个泛型接口,可存放任意类型。
  1. ArrayList在内存不够时默认是扩展1.5倍,Vector是默认扩展1倍。
  2. Vector提供indexOf(obj, start)接口,ArrayList没有。
  3. Vector属于线程安全级别的,但是大多数情况下不使用Vector,因为线程安全需要更大的系统开销。

Switch支持类型

基本类型:char,byte,int,short

包装类型:String,Byte,Short,Character,Integer,Enum

重写override和重载overload

| 区别点 | 重载方法 | 重写方法 | | :--- | :--- | :--- | | 参数列表 | 必须修改 | 一定不能修改 | | 返回类型 | 可以修改 | 一定不能修改 | | 异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或更广的异常 | | 访问 | 可以修改 | 一定不能做更严格的限制(可以降低限制) |

类与类之间关系

1. **is-a:**包括继承和实现关系 2. **has-a:**包括关联、聚合、组合关系 3. **use-a:**包括依赖关系

内部类

![](https://img-blog.csdnimg.cn/img_convert/c61d5071935700d4246b1a49b960ef4d.jpeg)

Java基本类型

1. 整数类型 byte short int long (int是整形,也属于整数类型) 进行运算的时候转成int运算 2. 浮点型 float double 3. 逻辑型 boolean(它只有两个值可取true false) 4. 字符型 char

Integer方法

+ Integer.parseInt("");是将字符串类型转换为int的基础数据类型 + Integer.valueOf("")是将字符串类型数据转换为Integer对象 + Integer.intValue();是将Integer对象中的数据取出,返回一个基础数据类型int

equals和hashcode

hashCode()的存在是为了查找的快捷性,用于在散列存储结构中确定对象的存储地址

如果两个对象 equals相等,则 hashCode()也一定相等

如果 equals方法被重写,则 hashCode()也应该被重写

如果两个对象的 hashCode()相等, equals()方法不一定相等

equals方法没有重写,比较的就是应用类型的变量所指向的对象的地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值