java面试题

 1 :写一个最优单例
//经过两次判定,第一次检测到实例为空时,增加同步,同步后再次检测到实例为空时,才创建对象实例。有效防止了在多线程环境下创建多个实例的问题。
public class Singleton {  
    private volatile static Singleton singleton;  
    private Singleton (){}  
    public static Singleton getSingleton() {  
    if (singleton == null) {  
        synchronized (Singleton.class) {  
        if (singleton == null) {  
            singleton = new Singleton();  
        }  
        }  
    }  
    return singleton;  
    }  
}  
  2 : String是最基本的数据类型吗? 
String是类类型,不是基本类型。 
基本类型 有八种
这八种基本类型分别是:
整型 (4种) byte short int long
字符型 (1种)char
浮点型 (2种)float double
布尔型(1种)boolean
  3 : int 和 Integer 有什么区别? 
int 是基本类型32位长度的整数

Integer 是类类型,是int的封装类

int和Integer之间可以通过自动装箱 自动拆箱 互相转换
  4 : String 和StringBuffer的区别? 
String是immutable的,其内容一旦创建好之后,就不可以发生改变。
StringBuffer 是可以变长的,内容也可以发生改变
改变的原理是StringBuffer内部采用了字符数组存放数据,在需要增加长度的时候,创建新的数组,并且把原来的数据复制到新的数组这样的办法来实现。 
更多细节可以参考 模仿StringBuffer的 MyStringBuffer 类是如何实现的。
  5 : 运行时异常与一般异常有何异同? 
运行时异常 又叫做非可查异常,在编译过程中,不要求必须进行显示捕捉
一般异常又叫做可查异常,在编译过程中,必须进行处理,要么捕捉,要么通过throws 抛出去.
  6 : 说出ArrayList,Vector, LinkedList的存储性能和特性。 
先说ArrayList和Vector
两者都继承了抽象类AbstractList,但是Vector是线程安全的,而ArrayList是非线程安全的

再说ArrayList和LinkedList的区别
ArrayList 是数组结构,所以定位很快,但是插入和删除很慢
LinkedList 是双向链表结构,所以插入和删除很快,但是定位很慢
  7 : Collection 和 Collections的区别。 
首先不要说成了一个是单数,一个是复数。。。
Collection是接口,是List和Set的父接口 
Collections是工具类,提供了排序,混淆等等很多实用方法
  8 : &和&&的区别 
& 有两个作用,分别是 位与 和 逻辑与
&& 就是逻辑与
作为逻辑与, & 和 && 分别表示长路与和短路与
长路与 两侧,都会被运算
短路与 只要第一个是false,第二个就不进行运算了
  9 : HashMap和Hashtable的区别 
HashMap和Hashtable都实现了Map接口,都是键值对保存数据的方式
区别1: 
HashMap可以存放 null
Hashtable不能存放null
区别2:
HashMap不是线程安全的类
Hashtable是线程安全的类
  10 : final, finally, finalize的区别 
final
final修饰类,方法,基本类型变量,引用的时候分别有不同的意思
修饰类 表示该类不能被继承
修饰方法 表示该方法不能被重写
修饰基本类型变量 表示该变量只能被赋值一次
修饰引用 表示该引用只有一次指向对象的机会
finally
finally 是用于异常处理的场面,无论是否有异常抛出,都会执行
finalize
finalize是Object的方法,所有类都继承了该方法。 当一个对象满足垃圾回收的条件,并且被回收的时候,其finalize()方法就会被调用
  11 : Overload和Override的区别,即重载和重写的区别。 Overloaded的方法是否可以改变返回值的类型? 
Overload是方法重载的意思,指的是在同一个类里面,方法名一样,但是参数不一样
Override是方法重写的意思,指的是子类继承了父类的某个方法后,重新又写了一遍
Overloaded的方法是否可以改变返回值的类型?
可以,重载其实本质上就是完全不同的方法,只是恰好取了相同的名字
  12 : Error和Exception有什么区别? 
Error和Exception都实现了Throwable接口 

Error指的是JVM层面的错误,比如内存不足OutOfMemoryError

Exception 指的是代码逻辑的异常,比如下标越界OutOfIndexException
  13 : abstract class和interface有什么区别? 
abstract class 抽象类和interface接口的区别

使用方式: 
抽象类只能够通过继承被使用
接口必须通过实现被使用

实现方法:
抽象类不仅可以提供抽象方法,也可以提供实现方法
接口只能提供抽象方法,不能提供实现方法。 但是在JAVA8版本开始,接口可以提供实现方法了,前提是要在方法前加一个default修饰符
  14 : heap和stack有什么区别 
heap: 堆
stack: 栈 (在一些书籍里,会被翻译为堆栈,实际上指的就是单纯的这个栈)

存放的内容不一样:
heap: 是存放对象的
stack: 是存放基本类型(int, float, boolean 等等)、引用(对象地址)、方法调用

存取方式不一样:
heap: 是自动增加大小的,所以不需要指定大小,但是存取相对较慢
stack: 是固定大小的,并且是FILO 先入后出的顺序,并且存取速度比较快
  15 : GC是什么? 为什么要有GC? 
GC是Garbage Collection的缩写,即垃圾回收
这里所谓的垃圾,指的是那些不再被使用的对象,JVM的垃圾回收机制使得开发人员从无聊、容易犯错的手动释放内存资源的过程中解放出来。
开发人员可以更加专注的进行业务功能的开发,而资源回收的工作交由更加专业的垃圾回收机制自动完成。
  16 : short s1 = 1; s1 = s1 + 1;有什么错? 
short s1 = 1; 这一句没有错误,编译器会自动把1这个整数处理为short.
s1 = s1 + 1; 右侧的表达式会返回一个Int类型的整数,再把这个int类型的整数赋给short类型的s1的时候,就会出现强制转换错误
  17 : Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 
Math.round 的意思是+0.5 取整数
所以 Math.round(11.5) 即 11.5+0.5 = 12
Math.round(-11.5) 即 -11.5+0.5 = -11
  18 : String s = new String("xyz");创建了几个String Object? 
String s = new String("xyz");
首先构造方法 new String("xyz"); 中的"xyz" 这本身就是一个字符串对象
然后 new 关键字一定会创建一个对象
所以总共创建了两个String对象
  19 : Java有没有goto? 
有,goto是关键字,但是是保留字,并不具备功能性
  20 : 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 
接口是否可继承接口? 
可以,比如List 就继承了接口Collection 
抽象类是否可实现(implements)接口? 
可以,比如 MouseAdapter鼠标监听适配器 是一个抽象类,并且实现了MouseListener接口
抽象类是否可继承实体类(concrete class)?
可以,所有抽象类,都继承了Object
  21 : List, Set, Map是否继承自Collection接口? 
List 和 Set 继承了Collection接口

但是Map和Collection之间没有继承关系,因为一个是键值对容器,一个是单值容器,无法兼容
  22 : abstract的method是否可同时是static,是否可同时是synchronized? 
abstract的method是否可同时是static,是否可同时是synchronized?

都不可以
  23 : 数组有没有length()这个方法? String有没有length()这个方法? 
数组获取长度的手段是 .length 属性
String获取长度的手段是 length()方法
集合获取长度的手段是 size()方法
文件获取长度的手段是 length()方法
  24 : Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 
以HashSet为例,判断重复的逻辑是:
1. 首先看hashcode是否相同,如果不同,就是不重复的
2. 如果hashcode一样,再比较equals,如果不同,就是不重复的,否则就是重复的。


  25 : 构造器Constructor是否可被override?是否可以继承String类? 
子类不能继承父类的构造方法,所以就不存在重写父类的构造方法。
注: super() 表示子类调用父类的构造方法,这不能被叫做继承父类的构造方法

String是final修饰的,所以不能够被继承
  26 : swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? 
switch可以作用在 byte,short,int String,Enum(枚举) 上,但是不能作用在long上面

注:注:switch作用在String上从JDK1.7开始支持,实质是编译时将字符串替换为了其对应的hash值
  27 : try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 
try里的return 和 finally里的return 都会执行,但是当前方法只会采纳finally中return的值
  28 : 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 
因为hashCode()方法和equals()方法都可以通过自定义类重写,是可以做到equals相同,但是hashCode不同的

但是,在Object类的equals()方法中有这么一段话
 
* Note that it is generally necessary to override the {@code hashCode}
* method whenever this method is overridden, so as to maintain the
* general contract for the {@code hashCode} method, which states
* that equal objects must have equal hash codes.
 

翻译如下:
 
通常来讲,在重写这个方法的时候,也需要对hashCode方法进行重写,
以此来保证这两个方法的一致性——
当equals返回true的时候,这两个对象一定有相同的hashcode.
 


两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
所以这个题的答案应该是否定的,但是得搞清楚里面的原委

两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
  29 : 垃圾回收的优点和原理。并考虑2种回收机制。 
与C语言开发人员需要手动进行内存资源的释放不同,Java提供垃圾回收机制,自动进行GC,将开发人员从容易犯错的内存资源管理中解放出来。

原理:当某个一个对象,没有任何引用指向它的时候,那么它就满足垃圾回收的条件,在适当的时候,JVM虚拟机进行GC将其回收,释放空间,以供后续再利用。

两种常见的回收机制:
1. 定时回收
每隔30分钟进行一次回收,这种机制的弊端是如果垃圾产生的比较快,有可能30分钟之内垃圾已经把内存占用光了,导致性能变慢

2. 当垃圾占到某个百分比的时候,进行回收
比如,当垃圾占到70%的时候,进行回收。 这种机制的弊端是,如果垃圾产生的频率很快,那么JVM就必须高频率的进行垃圾回收。 而在垃圾回收的过程中, JVM会停顿下来,只做垃圾回收,而影响业务功能的正常运行。

一般说来 JVM会采用两种机制结合的方式进行垃圾回收。
  30 : 你所知道的集合类都有哪些?主要方法? 
常见的集合
ArrayList,LinkedList,HashSet,HashMap,TreeSet 等等
常见方法:
size()
add()
remove()
等等
  31 : char型变量中能不能存贮一个中文汉字?为什么? 
char是16位的,占两个字节
汉字通常使用GBK或者UNICODE编码,也是使用两个字节
所以可以存放汉字
  32 : 解析XML文档有哪几种方式? 
主要是两种,SAX和DOM
SAX 就是逐行读取,直到找到目标数据为止

DOM 是先全文档加载,然后读取
  33 : 关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗? 
throws 用在方法声明上面,表示该方法有可能抛出某个异常
throw 抛出一个指定的异常
try catch 在try中有可能会抛出某个异常,一旦某个异常抛出后,就会在catch中进行捕捉,他俩一般说来都是成对出现的。
finally: 表示无论是否捕捉住异常,都会执行
  34 : 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 
可以包括多个类,但是只能出现一个public修饰的类,但是可以出现多个非public修饰的类。
  35 : java中有几种类型的流? 
Java中所有的流都是基于字节流,所以最基本的流是
输入输出字节流
InputStream
OutputStream
在字节流的基础上,封装了字符流
Reader
Writer
进一步,又封装了缓存流
BufferedReader
PrintWriter
以及数据流
DataInputStream
DataOutputStream
对象流
ObjectInputStream
ObjectOutputStream

以及一些其他的奇奇怪怪的流 ~~~
  36 : java中会存在内存泄漏吗,请简单描述。 
因为Java是自动进行垃圾回收管理的,所以不存在 C语言中同等概念的内存泄漏,但是存在Java特色的内存泄漏

当某些对象不被使用,但是又有非直接引用指向的时候,那么就不满足垃圾回收的条件,而形成内存泄漏。

比如代码中的例子,每个Object创建的时候,有一个引用o指向,接着就被放进了集合al中。 下一个Object创建的时候,上一个Object就没有引用指向了。

这些Object都没有引用指向,但是却放在ArrayList中,而这个Arraylist忘记了回收,那么里面的所有对象,都会一直存活下去,虽然不再被使用了。

package j2se;
 
import java.util.ArrayList;
 
public class MemoryLeak {
    static ArrayList<Object> al = new ArrayList<Object>();
 
    public static void main(String[] args) {
 
        for (int i = 0; i < 100; i++) {
            Object o = new Object();
            al.add(o);
        }
 
    }
}
  37 : java中实现多态的机制是什么? 
类的多态的条件: 
1. 父类(接口)引用指向子类对象
2. 方法有重写
  38 : 静态变量和实例变量的区别? 
静态变量 直接通过类就可以访问,无需实例

实例变量 比如同构类的某个具体实例,才可以访问
  39 : 什么是java序列化,如何实现java序列化? 
序列化指的是把一个Java对象,通过某种介质进行传输,比如Socket输入输出流,或者保存在一个文件里

实现java序列化的手段是让该类实现接口 Serializable,这个接口是一个标识性接口,没有任何方法,仅仅用于表示该类可以序列化。
  40 : 是否可以从一个static方法内部发出对非static方法的调用? 
不行,因为非static方法需要一个具体的实例才可以调用,而调用 static方法的时候,不一定存在一个实例
  41 : 在JAVA中,如何跳出当前的多重嵌套循环? 
在外部循环的前一行,加上标签
在break的时候使用该标签
即能达到结束多重嵌套循环的效果

public class HelloWorld {
    public static void main(String[] args) {
           
        //打印单数    
        outloop: //outloop这个标示是可以自定义的比如outloop1,ol2,out5
        for (int i = 0; i < 10; i++) {
              
            for (int j = 0; j < 10; j++) {
                System.out.println(i+":"+j);
                if(0==j%2) 
                    break outloop; //如果是双数,结束外部循环
            }
              
        }
          
    }
}
  42 : List、Map、Set三个接口,存取元素时,各有什么特点? 
List 是有顺序的,并且可以重复
Set 是无序的,不可以重复 (参考如何判断Set中的对象是否重复)
Map 保存数据的方式是键值对
  43 : Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以 implements(实现)interface(接口)? 
匿名内部类本质上就是在继承其他类,实现其他接口


  44 : 内部类可以引用外部类的成员吗?有没有什么限制? 
可以使用
如果是非静态内部类,可是使用外部类的所有成员
如果是静态内部类,只能使用外部类的静态成员
  45 : 多线程有几种实现方法,都是什么? 
通常来讲,Java 创建一个线程有三种方式
1. 继承一个Thread类
2. 实现Runnable接口
3. 匿名内部类

  46 : sleep() 和 wait() 有什么区别? 
(1)wait释放锁,sleep不释放锁,sleep必须捕获异常
(2)wait是Object类的方法,sleep是线程类(Thread)的方法调用会把执行机会给其他方法,但是监控状态依然保持;对象调用wait方法导致本线程放弃对象锁,进入等待锁定池,只有真对此对象发出notify()

  47 : 说出数据连接池的工作机制是什么? 
数据库连接池原理:
因为创建连接和关闭连接的行为是非常耗时的,会显著降低软件的性能表现。解决办法就是先创建n条数据库连接Connection,循环使用,但是不进行关闭,这样再执行SQL语句,就不需要额外创建连接了,直接使用现成的连接就可以了,从而节约了创建连接和关闭连接的时间开销。

  48 : 简述synchronized和java.util.concurrent.locks.Lock的异同 ? 
1. Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现,Lock是代码层面的实现。

2. Lock可以选择性的获取锁,如果一段时间获取不到,可以放弃。synchronized不行,会一根筋一直获取下去。 借助Lock的这个特性,就能够规避死锁,synchronized必须通过谨慎和良好的设计,才能减少死锁的发生。

3. synchronized在发生异常和同步块结束的时候,会自动释放锁。而Lock必须手动释放, 所以如果忘记了释放锁,一样会造成死锁。 

  49 : Class.forName的作用?为什么要用? 
Class.forName常见的场景是在数据库驱动初始化的时候调用。

Class.forName本身的意义是加载类到JVM中。 一旦一个类被加载到JVM中,它的静态属性就会被初始化,在初始化的过程中就会执行相关代码,从而达到"加载驱动的效果"
  50 : 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法 
这要看情况而定,如果该对象的其他方法也是有synchronized修饰的,那么其他线程就会被挡在外面。否则其他线程就可以进入其他方法。
  51 : 给我五个你最常见到的runtime exception。 
NullPointerException 空指针异常
ArithmeticException 算术异常,比如除数为零
ClassCastException 类型转换异常
ConcurrentModificationException 同步修改异常,遍历一个集合的时候,删除集合的元素,就会抛出该异常 
IndexOutOfBoundsException 数组下标越界异常
NegativeArraySizeException 为数组分配的空间是负数异常
  52 : 9种隐式对象,以及他们的用途 
JSP一共有9个隐式对象,分别是
request,response,out
分别代表请求,响应和输出

pageContext, session,application
pageContext 代表当前页面作用域
session 代表当会话作用域
application 代表当全局作用域

config
config可以获取一些在web.xml中初始化的参数,详见config对象
page
表示当前对象,详见page对象
exception 
表示异常对象,详见异常对象
  53 : 3种JSP的指令 
<%@page
JSP的基本设置,比如编码方式,import其他类,是否开启EL表达式

<%@include
包含其他的文件

<%@taglib
使用标签库
  54 : 2种JSP的动作 
<jsp:foward
服务端跳转

<jsp:include
包含其他文件
  55 : doGet()和 doPost的区别,分别在什么情况下调用 
doGet和doPost都是在service()方法后调用的,分别来处理method="get"和method="post"的请求
  56 : servlet的init方法和service方法的区别 
在Servlet的生命周期中,先调用init进行初始化,而且只调用一次。

接着再调用service,有多少次请求,就调用多少次service
  57 : servlet的生命周期 
一个Servlet的生命周期由 实例化,初始化,提供服务,销毁,被回收 几个步骤组成

servlet的生命周期
  58 : 页面间对象传递的方法 
假设是a.jsp传递数据到b.jsp,那么页面间对象传递的方式有如下几种
1. 在a.jsp中request.setAttribute,然后服务端跳转到b.jsp

2. 在a.jsp中session.setAttribute,然后跳转到b.jsp, 无所谓客户端还是服务端跳转

3. 在a.jsp中application.setAttribute, 然后跳转到b.jsp,无所谓客户端还是服务端跳转
  59 : Request常见方法 
request.getRequestURL(): 浏览器发出请求时的完整URL,包括协议 主机名 端口(如果有)" + 
request.getRequestURI(): 浏览器发出请求的资源名部分,去掉了协议和主机名" + 
request.getQueryString(): 请求行中的参数部分,只能显示以get方式发出的参数,post方式的看不到
request.getRemoteAddr(): 浏览器所处于的客户机的IP地址
request.getRemoteHost(): 浏览器所处于的客户机的主机名
request.getRemotePort(): 浏览器所处于的客户机使用的网络端口
request.getLocalAddr(): 服务器的IP地址
request.getLocalName(): 服务器的主机名
request.getMethod(): 得到客户机请求方式一般是GET或者POST

  60 : J2EE是技术,还是平台,还是框架 
是平台,上面运行各种各样的技术(servlet,jsp,filter,listner)和框架(struts,hibernate,spring)
  61 : Servlet与JSP的关系 
Servlet与JSP的关系

JSP就是Servlet
  62 : 编写JavaBean的注意事项 
JavaBean就是实体类
无参构造方法
属性都有public的getter和setter
  63 : MVC的各个部分都有哪些技术来实现,分别如何实现 
M 模型层代表数据,使用bean,dao等等
V 视图层代表展现,使用html,jsp,css
C 控制层代表控制,使用servlet
  64 : JSP中两种include的区别 
一种是静态包含,一种是动态包含
  65 : JSP中两种跳转的方式是什么,区别是什么 
分别是服务端跳转和客户端跳转


  66 : 如何实现在Servlet中用正则表达式对e-mail格式进行验证 

public static boolean emailFormat(String email)
    {
        boolean tag = true;
        final String pattern1 = "^([a-z0-9A-Z]+[-|//.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?//.)+[a-zA-Z]{2,}$";
        final Pattern pattern = Pattern.compile(pattern1);
        final Matcher mat = pattern.matcher(email);
        if (!mat.find()) {
            tag = false;
        }
        return tag;
    }
  67 : 如何处理中文问题 
中文问题分几个部分
1. 提交数据的时候使用UTF-8 编码
2. 接受数据的时候使用UTF-8 解码
3. 显示数据的时候使用UTF-8 编码

  68 : 简述你对简单Servlet、过滤器、监听器的理解 
Servlet 作用是处理获取参数,处理业务,页面跳转

过滤器的作用是拦截请求,一般会用做编码处理,登陆权限验证

监听器的作用是监听Request,Session,Context 等等的生命周期,以及其中数据的变化

69.面向对象的特征有哪些方面? 
封装
最常见的是把属性私有化封装在一个类里面,只能通过方法去访问
继承
子类继承父类,从而继承了父类的方法和属性
多态
多态分操作符的多态和类的多态。 类的多态指父类引用指向子类对象,并且有继承,有重写。

70.hashmap与concurrentHashmap原理
 concurrentHashmap:segement数组每个位置存hashEntry 采用分段锁把整体分为多段Hashtable他们有自己的锁 默认16段

 hashmap原理:
    链表entry+数组table
    往hashmap存放kv的时候实例化一个entry对象,通过key的hashcode对table数组长度取模求出下标索引,遍历该索引位置,若无数据,则存到该位置,若有,则遍历到next=null并将next指向该entry

71.数据库引擎innodbhemyisam区别
myIsam适合大量select innoDB适合大量INSERT\UPDATE
myIsam不支持事务 InnoDB支持事务
myIsam表级锁(整张表加锁其他进程不可写) InnoDB行级锁(只对某些行加锁其他可正常使用)
myIsam存储行数 InnoDB不存储

72.NIO与IO区别
1.io是面向流的,也就是读取数据的时候是从流上逐个读取,所以数据不能进行整体以为,没有缓冲区;nio是面向缓冲区的,数据是存储在缓冲区中,读取数据是在缓冲区中进行,所以进行数据的偏移操作更加方便
2,io是阻塞的,当一个线程操作io时如果当前没有数据可读,那么线程阻塞,nio由于是对通道操作io,所以是非阻塞,当一个通道无数据可读,可切换通道处理其他io
3,nio有selecter选择器,就是线程通过选择器可以选择多个通道,而io只能处理一个

73. CAS 操作

乐观锁(假设无冲突,失败重试)用到的机制就是CAS,Compare and Swap。

CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做

74.对spring中IOC(控制反转)与DI(依赖注入)与AOP(面向切面)的理解
IOC:我们不需要手动创建对象,而是通过配置XML文件将控制权转交给IOC容器,由IOC来管理对象的生命周期、依赖关系
DI:与IOC是同一概念的不同解释,是指经相关配置,由容器动态的将某个依赖关系注入到组件中
AOP:通过相关配置,在程序运行时动态将代码切入到指定位置上,如要执行A,通过配置切入点和增强(执行什么)而变为执行xAy,x和y需要自己实现
对侵入性的理解:不依赖其API不需继承相关父类或实现接口

75.Java创建对象的几种方式:
(1) 用new语句创建对象,这是最常见的创建对象的方法。
(2) 运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。
(3) 调用对象的clone()方法。
(4) 运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。

76.HTTPS和HTTP的区别主要如下:
(1)https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
(2)http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
(3)http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
(4)http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输

77.死锁产生4个条件
出现死锁有4 个必要条件:①互斥:存在互斥使用的资源,也就是临界资源;②占
有等待:拥有资源的进程都在等待另外的资源;③非剥夺:进行所占有的资源是不可剥夺使
用的资源;④循环等待:都在相互等待资源。

78.java基本数据类型范围
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)
float 4字节
double 8字节
char 2字节
boolean

79.浏览器输入www.baidu.com后执行全过程
浏览器通过DNS解析到该地址的IP地址,与服务器建立TCP连接,发出HTTP请求,服务器通过HTTP响应把首页文件发送给浏览器,浏览器解析首页文件并显示

80.TCP UDP区别
tcp面向连接的、可靠的数据流传输(报文段) 安全、完整
基于TCP协议:FTP  Telnet  SMTP POP3  HTTP
udp无连接的不可靠的数据流传输(数据报) 速度快
基于UDP协议:DNS  SNMP TFTP

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值