应届本科拿下重庆6.5Kjava开发岗位,结合这份面试题大家觉得合理吗?

请添加图片描述
请添加图片描述

答案已整理

1.hashmap和hashtable区别

  • 相同点:
  1. 都是map的实现类,都是键值对集合;
  2. 里边的元素都是无序的,跟添加顺序无关;
  • 不同点:
  1. HashMap允许有一个null键和多个null值;

  2. HashMap不是线程安全的,HashTable是线程安全的。

一般这么问的都不会就此罢休的,可能还会扯到多线程、扩容机制、ConcurrentHashMap、等等一连串问题

2.手写个Ajax请求

<script>
	$.ajax({
    
    
		type: "post", //type可以为post也可以为get
		url: "www.baidu.com",
		data: {
    
    
			"username": username
		}, 
		async: false,//ture同步 false异步 一般没人会弄成异步
		dataType: "json", //这里要注意如果后台返回的数据不是json格式,那么就会进入到error:function(data){}中
		success: function(data) {
    
    
		},
		error: function(data) {
    
    
		},
		complete: function(data) {
    
    
			alert("必执行、相当于java抛异常中的finally、一般不常用")
		}
	});
</script>

3.递归实现斐波拉切,输出第三十个数?

斐波那契数列:1、1、2、3、5、8、13、21、34、…,即这个数列从第3项开始,每一项都等于前两项之和。

递归:

public static void main(String[] args) {
    
    
			System.out.println(digui(30));
	}
	public static int digui(int n) {
    
    
		if (n == 1 || n == 2)
			return 1;
		else
			return digui(n - 1) + digui(n - 2);
	}

动态规划:

public class 斐波那契数列 {
    
    
	public static int f(int n) {
    
    
		if(n==0) {
    
    
			return 0;//初始值为0
		}
		if(n==1) {
    
    
			return 1;//定义f(1)为1,否者结果都是0;
		}
		int result=0;
		int r1 = 0;
		int r2 = 1;
		for(int i = 2;i<=n; i++) {
    
    //斐波那契数列求解f(n)
			result = r1+r2;
			r1=r2;
			r2=result;
		}
		return result;//返回结果
	}
	public static void main(String[] args) {
    
    
		System.out.println("请输入一个不超过39的整数:");
		Scanner s=new Scanner(System.in);//从键盘输入
		int n;
		n=s.nextInt();
		double startTime=System.currentTimeMillis();
		System.out.println(f(n));
		double endTime=System.currentTimeMillis();
		System.out.println("执行时间:"+(endTime-startTime)+"ms");//测试时间
	}
}

4.如何实现跨域?(前后端分离?)

  1. jsonp
    利用了 script 不受同源策略的限制
    缺点:只能 get 方式,易受到 XSS攻击
  2. CORS(Cross-Origin Resource Sharing),跨域资源共享
    当使用XMLHttpRequest发送请求时,如果浏览器发现违反了同源策略就会自动加上一个请求头 origin;
    后端在接受到请求后确定响应后会在后端在接受到请求后确定响应后会在 Response Headers 中加入一个属性 Access-Control-Allow-Origin;
    浏览器判断响应中的 Access-Control-Allow-Origin 值是否和当前的地址相同,匹配成功后才继续响应处理,否则报错
    缺点:忽略 cookie,浏览器版本有一定要求
  3. 代理跨域请求
    前端向发送请求,经过代理,请求需要的服务器资源
    缺点:需要额外的代理服务器
  4. Html5 postMessage 方法
    允许来自不同源的脚本采用异步方式进行有限的通信,可以实现跨文本、多窗口、跨域消息传递
    缺点:浏览器版本要求,部分浏览器要配置放开跨域限制
  5. 修改 document.domain 跨子域
    相同主域名下的不同子域名资源,设置 document.domain 为 相同的一级域名
    缺点:同一一级域名;相同协议;相同端口
  6. 基于 Html5 websocket 协议
    websocket 是 Html5 一种新的协议,基于该协议可以做到浏览器与服务器全双工通信,允许跨域请求
    缺点:浏览器一定版本要求,服务器需要支持 websocket 协议
  7. document.xxx + iframe
    通过 iframe 是浏览器非同源标签,加载内容中转,传到当前页面的属性中
    缺点:页面的属性值有大小限制

5.post和get区别

  1. GET提交的数据放在URL中,POST则不会。这是最显而易见的差别。这点意味着GET更不安全(POST也不安全,因为HTTP是明文传输抓包就能获取数据内容,要想安全还得加密)
  2. GET回退浏览器无害,POST会再次提交请求(GET方法回退后浏览器再缓存中拿结果,POST每次都会创建新资源)
  3. GET提交的数据大小有限制(是因为浏览器对URL的长度有限制,GET本身没有限制),POST没有
  4. GET可以被保存为书签,POST不可以。这一点也能感受到。
  5. GET能被缓存,POST不能
  6. GET只允许ASCII字符,POST没有限制
  7. GET会保存再浏览器历史记录中,POST不会。这点也能感受到。

总之,两者之间没有本质区别,区别就在于数据存储的位置。各自有适用环境,根据需求选择合适的方法即可。

6.SQL分组排序查询

分组:GROUP BY 字段
排序:ORDER BY 字段

7.synchronized和lock的区别。

  1. Lock提供了超时机制
    超时机制可以让我们更灵活的控制程序,而不必陷入等待锁的死循环中,在一定时间内获取不到锁,线程就释放出来继续干下面的事情,而synchronized一旦尝试加锁,就会死等,所以这种情况就有可能会出现死锁。
  2. Lock阻塞的线程可以响应中断
    synchronized线程一旦获取锁失败就会进行阻塞,而阻塞状态下的线程是无法响应中断(Interrupted)的,而Lock是支持中断响应的,一旦发现可能出现死锁,可立即中断某个线程。
  3. Lock支持非阻塞的获取锁
    Lock支持不阻塞的方式获取锁,以这种方式获取锁时会返回获取锁是否成功,当尝试获取锁不成功时,线程并不会阻塞。
  4. Lock+Condition可以支持多个条件
    synchronized只有一个等待队列,任何情况的阻塞都是放在一个队列里面的,Lock可以创建多个Condition队列,不同的Condition控制不同的条件,每个Condition有单独的一个队列。

8.tcp和ftp在7层中的位置

  • 第一层:物理层
  • 第二层:数据链路层802.2、802.3ATM、HDLC、FRAME RELAY
  • 第三层:网络层IP、IPX、APPLETALK、ICMP
  • 第四层: 传输层TCP、UDP、SPX
  • 第五层:会话层RPC、SQL、NFS 、X WINDOWS、ASP
  • 第六层:表示层ASCLL、PICT、TIFF、JPEG、 MIDI、MPEG
  • 第七层: 应用层HTTP,FTP, SNMP等

9.事务acid,MySQL如何实现原子性

  • 原子性(atomicity)
  • 一致性(consistency)
  • 隔离性(isolation)
  • 持久性(durability)

一个事务要么全部提交成功,要么全部失败回滚,不能只执行其中的一部分操作,这就是事务的原子性

扩展连接:加粗样式更多请点击这里

博主公众号程序员小羊 只发面试相关推文
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44395707/article/details/106526000