0
点赞
收藏
分享

微信扫一扫

java面试2022-1-11

敬亭阁主 2022-01-12 阅读 81

java面试2022-1-11

java多线程加锁的方式

  1. 使用java里的关键字synchronized给线程加锁

  2. 使用实现Lock这个的方法同步访问
    两者的区别
    synchronize修饰代码块时,当一个线程获得对应的锁并且执行这个代码块时,其他线程只能一直等待,等待获取锁的线程释放锁:
    (1)获取锁的线程执行完该代码块,然后释放锁
    (2)线程行为发生异常时,JVM会自动释放锁
    synchronize缺点:可能会造成线程的阻塞当该线程需要等待IO时或者sleep()被阻塞,但又没有释放锁,其他线程都要等待,影响效率。
    Lock是手动上锁,手动释放锁,而synchronize是自动释放,lock不是java内置的,是类。
    synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock在发生异常时,如果没有主动通过unLock()去释放锁,则很可能造成死锁现象,因此使用Lock时需要在finally块中释放锁,在性能上来说,如果竞争资源不激烈,两者的性能是差不多的,而当竞争资源非常激烈时(即有大量线程同时竞争),此时Lock的性能要远远优于synchronized。所以说,在具体使用时要根据适当情况选择

HTTP请求报文头属性

  1. Accept:告诉服务器,客户端接收什么样类型的响应
  2. Cookie:客户端的cookie是通过该属性传给服务端的
  3. Referer:表示这个请求是从那个url来的
  4. Cache-control对缓存进行控制

跨域问题

  1. 同源策略:
    在这里插入图片描述
    如果是协议和端口造成的跨域问题“前台”是无能为力的

解决方法
1)CORS(跨域资源共享)(cross-origin resourse sharing)通过服务器的response响应头里参数标注:
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials:true
2 )服务器代理 跨域是js的特性,服务端不受影响,所以可以用服务器来请求对应的数据,再返给前端。

然后就是前端来处理跨域问题
1)Ajax的jsonp 它利用的是html标签中src属性可以不受跨域影响的特性。
2)document.domain主要用于主域名相同的不同子域名之间的跨域
3)http-proxy-middleware 代理解决(项目使用vue-cli脚手架搭建)

补充:域名

顶级域名,我们知道域名由两个或两个以上的词构成,中间由点号分隔开,最右边的那个词就叫做顶级域名。我们接触的顶级域名又分为两类:一是国家和地区顶级域名。例如中国是cn,美国是us等;二是国际顶级域名,例如表示工商企业的.com,表示非盈利组织的.org,表示网络商的.net等。
一级域名又称顶级域名,即:
baidu.com
二级域名,即:
www.baidu.com
三级域名,即:
.().().baidu.com

总结

将前端和后端连接的逻辑搞清楚,也是面试的一大问题。

举报

相关推荐

0 条评论