Java后端面试复习7.23

  1. 进程和线程
  2. 线程优先级
  3. 线程状态
  4. 线程构造方式三种
  5. 推荐用哪种为什么
  6. 线程中断调用什么方法,本线程怎检查
  7. 为什么线程不应强制停止
  8. 线程通信方式四种
  9. ThreadLocal
  10. FUtureTask
  11. 线程礼让
  12. 终止线程的另一个缺陷(锁)
  13. 守护线程
  14. 什么时候设置为守护县城
  15. sleep,yieldjoin的区别
  16. 能否按照优先级严格执行
  17. THreadlocal的例子Simpledataformat
  18. Threadlocal的弱引用
  19. 解决map冲突
  20. 内存泄露,怎么解决
  21. 域名分片
  22. 短连接长链接流水线
  23. 什么是cookie
  24. 请求头和响应头那些和cookie有关
  25. 可以设置多个cookie
  26. 保存在哪
  27. 设置有效期两种手段
  28. 作用域domain和路径path
  29. cookie分类,时间和存储
  30. cookie的缺点
  31. 什么事session
  32. session存储的信息
  33. 客户鞋带什么信息
  34. session实现方式两种
  35. session存在的问题
  36. 使用token流程
  37. 什么是token
  38. jwt的三个组成部分
  39. 优点

  1. 分配资源,CPU调度
  2. 1-10,调用setPriority设置,越大时间片越多,默认5
  3. 初始,运行,阻塞(于锁),等待,超市等待,结束
  4. 实现Runnalbe,Callable,继承Thread
  5. 前两种,1只能单继承2继承的没用属性占地方
  6. 对应线程的interrupt,调用本线程的isInterrupt
  7. 因为很可能当前线程为执行完造成数据丢失
  8. volatile保证可见,synchronized同步,wait和notify,对应线程.join
  9. 只允许本线程访问的一种map形式的结构,key为ThreadLocal对象,值可以是任意的。可以通过对象。set或对象。get获取或设置
  10. 既实现了Runnable定义run方法执行,又能够配合Callable(将callable当作参数传入构造方法)获取run的返回值
  11. 调用yield方法,让同优先级的或者有更高优先级的线程去执行。
  12. 比如有一个线程有ReentrantLock,他持有锁的时候被终止了,那么他的锁也不会释放,其他等待锁的线程就无法获得锁
  13. 守护线程是一类优先级比较低的线程,他们会随着用户线程的退出而终止,也就是说守护线程不会单独存在,GC线程,
  14. 必须在线程启动之前调用set来设置
  15. sleep会使得线程转入wait的状态,并且如果当前线程持有锁,他不会释放。yield会有running转为runnable状态,允许相同优先级的其他线程或者优先级更高的线程去执行。join是会让当前线程由running转为runnable的状态,等待相应的线程执行完之后才能执行后续代码
  16. 不一定,因为线程的优先级调度是根据实际的OS调度的,Java对OS的兼容没有那么完美
  17. 比如有一个sdf对象,sdf是线程不安全的,比如我想调用parse这个方法,这个方法分两步,首先执行clear,然后set,如果线程1正好set完,线程二执行clear就会导致线程并发安全问题。一种方法是使用synchorized进行同步,但是效率低,第二种使用threadlocal来保存sdf对象。
  18. threadlocal使用map保存,每个线程有一个htreadlocalmap对象,该对象保存了所以threadlocal对象以及其存储的值之间的映射关系,如果存储的值是对象,这里保存的是指向堆的地址。key是使用threadlocal内部定义的entry来实现的,这个entry继承了weakreference,所以map中的key都是若引用类型
  19. map冲突不是使用拉链发来解决的,而是线性探测法,向后寻找空位置
  20. 内存泄漏-->长生命周期的对象持有短生命周期对象的引用。比如说在线程池中,当一个线程执行完当前任务后,他的threadloacl会置空,那么这些身为弱引用的key会在下一次gc的时候被回收,但是他们的长生命周期的value还在堆空间中,并且由于线程池没被回收,所以这些堆空间中的value就不会被回收造成内存泄漏。
  21. 多个域名只想同一个服务器,不同域名可以与客户端建立多个连接,既避免了触发Dos防御,又提高了并发。
  22. 每次发送数据接受数据都建立tcp链接。建立一次tcp链接,再次链接上进行收发数据。发送方不用等第一个请求返回既可以发剩余请求
  23. 保存在浏览器,记录用户状态
  24. 请求头:Cookie响应头:setcookie
  25. 可以,分号分隔,响应头设置多个setcookie字段
  26. 浏览器
  27. 在cookie中设置两个字段,expires和max-age,取小的作为年龄,expires记录了过期时间,到了就过期,max-age要计算,颁发时间+max-age=过期时间
  28. domain制定了cookie所属的域名和访问路径,如果请求不满足这两个就不会携带该cookie
  29. 时间:长期和短期,存储:物磁盘和内存
  30. 实现简单,能够记录用户状态。占用带宽比较多,不安全,数量容量限制
  31. 服务器端保存用户信息和事件的手段
  32. 用户的事件,用户基本信息
  33. sessionid
  34. 基于cookie,使用cookie携带session id或者基于重写url,在url上写session id
  35. 大量用户的计算和存储资源的耗费大,分布式系统不同服务间无法共享
  36. 客户发起请求(登录),根据用户信息构建token,将token发送给用户,用户后续请求携带token,服务器解析token识别用户,响应数据
  37. token是保存用户信息,便于服务器识别用户的手段
  38. 头部记录使用的加密算法,载荷记录用户名过期时间等信息,签名根据前面两个字段以及密钥生成,服务器用以验证
  39. 可以跨站,占用空间不大,依赖算法加密的安全性
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
道路设计中的超高值是指路面在曲线上仍然向外倾斜的部分,通常位于拐点处。超高值的设计需要满足车辆行驶的安全性和舒适性,需要考虑多种因素,比如车速、曲线半径、坡度、路面摩擦系数等。 以下是一个使用Java语言设计道路设计中超高值的示例代码: ```java import java.util.Scanner; public class Superelevation { private double radius; // 曲线半径 private double speed; // 车速 private double friction_coeff; // 路面摩擦系数 private double superelevation; // 超高值 public Superelevation(double radius, double speed, double friction_coeff) { this.radius = radius; this.speed = speed; this.friction_coeff = friction_coeff; this.superelevation = calculateSuperelevation(); } public double getSuperelevation() { return this.superelevation; } private double calculateSuperelevation() { double g = 9.8; // 重力加速度 double f = friction_coeff / 100.0; // 路面摩擦系数转换为小数 double v = speed * 1000.0 / 3600.0; // 车速转换为米每秒 double e = v * v / (g * radius); // 计算超高系数 double superelevation = e / (1 - f); // 计算超高值 return superelevation; } public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Enter the radius of the curve (m): "); double radius = input.nextDouble(); System.out.print("Enter the speed of the vehicle (km/h): "); double speed = input.nextDouble(); System.out.print("Enter the friction coefficient of the road surface (%): "); double friction_coeff = input.nextDouble(); Superelevation s = new Superelevation(radius, speed, friction_coeff); double superelevation = s.getSuperelevation(); System.out.printf("Superelevation: %.2f%%\n", superelevation * 100); } } ``` 在程序中,我们定义了一个Superelevation类用于计算超高值。程序首先从用户处输入曲线半径、车速和路面摩擦系数,然后计算超高系数和超高值,并输出结果。 计算超高值的公式如下: - e = v^2 / (g * r) - superelevation = e / (1 - f) 其中,v表示车速,r表示曲线半径,f表示路面摩擦系数,g表示重力加速度。 程序运行示例: ``` Enter the radius of the curve (m): 200 Enter the speed of the vehicle (km/h): 60 Enter the friction coefficient of the road surface (%): 20 Superelevation: 7.23% ``` 程序输出了计算得到的超高值为7.23%。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值