java你会点什么?

其实就是个笔记。。。记录一下不会的,有错误欢迎指出。

CAS

加锁机制通常分为悲观锁和乐观锁,乐观就是认为冲突比较少,遇到冲突就回滚,在java里CAS就是比较和交换机制,四个字段。内存地址,预期旧值,新值和版本,当比较内存地址上旧值相同和版本相同时,替换为新值。

int和Integer的区别

1、Integer是int的包装类,int则是java的一种基本数据类型
2、Integer变量必须实例化后才能使用,而int变量不需要
3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
4、Integer的默认值是null,int的默认值是0

Integer a = 2;
		int b = 2;
		System.out.println(a==b);
		System.out.println(a+b);
		Integer c = 2;
		System.out.println(a==c);
		Integer i = new Integer(2);
		Integer j = new Integer(2);
		System.out.println(i == j);
		System.out.println(i == a);
		
		Integer a1 = 200;
		int b1 = 200;
		System.out.println(a1==b1);
		System.out.println(a1+b1);
		
		ArrayList<Integer> res = new ArrayList<Integer>();
		res.add(2000);
		res.add(129);
		System.out.println(res);
		
		Integer a2 =2;
		System.out.println(a2==a);
		Integer a3 = 200;
		Integer a4 = 200;
		System.out.println(a3==a4);

结果为
在这里插入图片描述

除了构造函数和重载,函数名能不能一样?

一开始我觉得是报错的,但是。。。。。事实证明是没问题的

在这里插入图片描述

进程通信方式有哪些

进程的并发执行,导致了竞争资源、共同协作、相互通信。
总的来说有
在这里插入图片描述
一般通信方式包括低级通信和高级通信。
低级通信:信号量
高级通信:管道、消息队列、共享内存和套接字
管道:包括无名管道和命名管道,是单向的,对于无名管道只能在父子进程间或兄弟进程间通信使用,特点:管道满时,写阻塞;空时,读阻塞。对于命名管道,只要知道管道名就可以使用。
对于管道来说,效率低,所以使用比较少。

消息队列:ipcs查看资源
ipcrm删除ipc资源
消息队列在发送数据的时候,按照一个个独立单元(消息体)进行发送,其中每个消息体规定大小块,同时发送方和接收方约定好消息类型或者正文的格式。
消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。
其支持随即读取。
共享内存(Shared Memory):指两个或多个进程共享一个给定的存储区。
因为可以共享,速度快,但需要进行同步,一般结合信号量使用。
共享内存的位置在堆和栈之间。

信号量:实际上是一个计数器,主要实现进程之间的同步和互斥,而不是存储通信内容。一般有PV两种操作。
信号:信号对应函数,根据接收到的信号直接执行函数即可。
套接字:socket建立连接,进行通信,属于不同机器之间的通信。

64位和32位的区别?

运行能力不同。64位是8字节处理,32位是4字节。
内存寻址不同。64位最大寻址空间为2的64次方,理论值直接达到了16TB,而32位的最大寻址空间为2的32次方,为4GB。
64位的操作系统可以兼容运行32位,反之不行。

内存碎片

经常听说,但是不是很明确,之前看java的gc时,标记清除算法会容易产生不连续的内存,也就是碎片化了。
内存碎片分为:内部碎片和外部碎片。
外部碎片是出于任何已分配区域或页面外部的空闲存储块。这些存储块的总和可以满足当前申请的长度要求,但是由于它们的地址不连续或其他原因,使得系统无法满足当前申请。
内部碎片就是已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间;

线程和进程,死锁

另一个笔记写过了

系统如何提高并发性?

1、提高CPU并发计算能力
减少进程切换,使用线程,考虑进程绑定CPU,因为多进程切换是比多线程切换慢的
减少使用不必要的锁,考虑无锁编程
2、改进I/O模型

http状态码

301,302简单
304是未修改,表示不用再缓存
305是使用代理

SSL握手过程

别的不说,肯定知道是分两部分的,第一部分是sayhello,也就是建立连接的过程,第二部才是正常的http通信。第一部分形象记忆如下

第一步,爱丽丝给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。

第二步,鲍勃确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。

第三步,爱丽丝确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给鲍勃。

第四步,鲍勃使用自己的私钥,获取爱丽丝发来的随机数(即Premaster secret)。

第五步,爱丽丝和鲍勃根据约定的加密方法,使用前面的三个随机数,生成"对话密钥"(session key),用来加密接下来的整个对话过程。

http1.1和1.0的区别

几乎没了解
HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。而1.0则是全部返回,不支持部分。
HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname),但这对于同一地址多个虚拟主机会报错400,
长连接,HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。

http和https的区别

https申请证书需要钱,http不用
https内容是加密的,安全
相对于http,https稍微慢一些
连接的端口不一样,http是80,https是443

http请求,并说明应答码502和504的区别

一般就将get和post请求
post发的是请求体
POST请求可能会导致新的资源的创建和/或已有资源的修改。
502:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。重点是无效响应

504:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。重点是未能及时
在这里插入图片描述

浏览器从接收到一个URL,到最后展示出页面,经历了哪些过程。

第一步解析url,也就是域名反向查询IP,定位到资源,建立TCP连接,发送http请求,接收到响应报文,渲染页面。

路由器和交换机的区别

工作层次不同,一个是网络层、一个是数据链路层
寻址依据不同,一个是基于IP寻址,一个基于MAC寻址
交换机主要是用于组建局域网,而路由器则是负责让主机连接外网。

负载均衡 反向代理模式的优点、缺点

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
动态地转发给内部网络上的多台服务器实现负载均衡
以软件方式来实现,也可以在高速缓存器、负载均衡器等硬件设备上实现。
此外由于网络外部用户不能直接访问真实的服务器,具备额外的安全性。
缺点是反向代理是处于OSI参考模型第七层应用的,由于要为每个应用开启一个反向代理限制了反向代理负载均衡技术的应用范围,目前大多基于web服务器实现负载均衡
同时每条代理存在对外和对内两条连接,负载较大。

Linux的十位文件权限信息代表什么?例如-rwzrwz—

分为四段,第一个是一段,表示文件类型,
后边每三个是一段,依次是自己,群组,和其他人
读写执行的权限

Hashmap原理,时间久了一直忘

HashMap的初始容量为16,Hashtable初始容量为11
后者是相对线程安全的
HashMap可以使用null作为key,而Hashtable则不允许null作为key
HashMap由数组和红黑树来实现对数据的存储

一致性哈希算法

顺序哈希到区间,Dynamo数据库用的就是这个算法存储

集合框架的有序和无序

list是有序的
集合是元素唯一,无序的,那么这里的有序是什么意思,输入输出的顺序是有序的,即第一个输入的一定是第一个输出的,虽然集合有排序功能,但它仍然是无序的。

常说的堆和栈,比如递归太大导致内存中的栈溢出了

堆区:专门用来保存对象的实例(new 创建的对象和数组),实际上也只是保存对象实例的属性值,属性的类型和对象本身的类型标记等,并不保存对象的方法(方法是指令,保存在Stack中)
所有线程共享
栈区:对象实例在Heap 中分配好以后,需要在Stack中保存一个4字节的Heap内存地址,用来定位该对象实例在Heap 中的位置,便于找到该对象实例。
每个线程独有

栈是运行时的单位,而堆是存储时的单位。
堆中存的是对象。栈中存的是基本数据类型和堆中对象的引用。

为什么要把堆和栈区分出来呢?

第一,从软件设计的角度看,栈代表了处理逻辑,而堆代表了数据。
第二,堆与栈的分离,使得堆中的内容可以被多个栈共享
第三,栈因为运行时的需要,比如保存系统运行的上下文,需要进行地址段的划分。由于栈只能向上增长,因此就会限制住栈存储内容的能力。而堆不同,堆中的对象是可以根据需要动态增长的,因此栈和堆的拆分,使得动态增长成为可能,相应栈中只需记录堆中的一个地址即可。
第四,面向对象就是堆和栈的完美结合。其实,面向对象方式的程序与以前结构化的程序在执行上没有任何区别。但是,面向对象的引入,使得对待问题的思考方式发生了改变,而更接近于自然方式的思考。当我们把对象拆开,你会发现,对象的属性其实就是数据,存放在堆中;而对象的行为(方法),就是运行逻辑,放在栈中。我们在编写对象的时候,其实即编写了数据结构,也编写的处理数据的逻辑。

在什么情况下使用assert?

不了解,答案来自网上
assertion (断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。
在实现中,assertion就是在程序中的一条语句,它对一个 boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。
保证程序最基本、关键的正确性。
开发和测试阶段使用

JSP中的静态包含和动态包含的有哪些区别?

在这里插入图片描述
动态包含会编译出两个class文件,同时当包含页面不存在的时候不会产生编译错误

web.xml可以配什么?

我用过的不多,里边只配了spring项目的一些初始化参数
例如
在这里插入图片描述
此外就是拦截的servlet请求
在这里插入图片描述
面经中写的是
web.xml用于配置Web应用的相关信息,如:监听器(listener)、过滤器(filter)、 Servlet、相关参数、会话超时时间、安全验证方式、错误页面等

监听器和过滤器没听过

反正也记不住,简单记录一下,
Java Web开发中的监听器(listener)就是application、session、request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。
Java Web开发中的过滤器(filter)就是双向拦截请求和响应,做到修改内容。
常见的过滤器用途主要包括:对用户请求进行统一认证、对用户的访问请求进行记录和审核、对用户发送的数据进行过滤或替换、转换图象格式、对响应内容进行压缩以减少传输量、对请求或响应进行加解密处理、触发资源访问事件、对XML的输出应用XSLT等。

网站在架构上应当考虑哪些问题?

  • 分层
  • 分割
  • 分布式
  • 集群
  • 缓存:CDN
  • 异步:异步架构是典型的生产者消费者模式,二者之间没有直接的调用关系,只要保持数据结构不变,彼此功能实现可以随意变化而不互相影响,这对网站的扩展非常有利。
  • 冗余:类似于备份机制
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值