• 第五次Java测试总结


    解析:A

    在这里插入图片描述

    1. // 死锁
    2. public class T3 {
    3. public static void main(String[] args) {
    4. String lockA = "a";
    5. String lockB = "b";
    6. new Thread(new HoldLockThread(lockA,lockB)).start();
    7. new Thread(new HoldLockThread(lockB,lockA)).start();
    8. }
    9. }
    10. class HoldLockThread implements Runnable{
    11. private String locka;
    12. private String lockb;
    13. public HoldLockThread(String locka, String lockb) {
    14. this.locka = locka;
    15. this.lockb = lockb;
    16. }
    17. @Override
    18. public void run() {
    19. synchronized (locka){
    20. System.out.println(Thread.currentThread().getName() + " 自己持有" + locka + "尝试获得" + lockb);
    21. try {
    22. Thread.sleep(2000);
    23. } catch (Exception e){
    24. e.printStackTrace();
    25. }
    26. synchronized (lockb){
    27. System.out.println(Thread.currentThread().getName() + " 自己持有" + lockb + "尝试获得" + locka);
    28. }
    29. }
    30. }
    31. }

    解析:B

    + 号代表前面的字符必须至少出现一次(1次或多次)

    * 号代表前面的字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)

    ? 问号代表前面的字符最多只可以出现一次(0次或1次)

    解析:[-1,21,37,37,71,71,85]

    解析:ABC

    GET 是会被浏览器主动缓存的,如果下一次传输的数据相同,那么就会返回缓存中的内容,以求更快地展示数据。

    GET 方法只产生一个 TCP 数据包,浏览器会把请求头和请求数据一并发送出去,服务器响应 200 ok(返回数据)。而POST方法会产生两个TCP数据包,浏览器会先将请求头发送出去,如果服务器响应正确(也不是正确,反正就是一个可以继续发送请求的标志),再将请求体发送出去。否则,不会继续发送请求体。这样有利于节省资源。

    解析:B

    两个栈一个作为存储栈,另一个作为缓冲栈。

    当O作为缓冲栈,P作为存储栈时。P中存满P个元素,此时P栈栈底的元素即队头元素,所以需要将存储栈P中的所有元素出栈,然后放至缓冲栈O,然后再将P栈中存满P个元素。此时,栈O中元素的出栈顺序和入栈P时的顺序符合先入先出。然后将栈P中的P个元素又按照上面的方法放入栈O中...所以模拟队列的最大空间是2P.

    当O作为存储栈,P作为缓冲栈时。因为O>P,所以栈O中第一次存储的时候最多只能存储P个元素,否则栈P中装载不了栈O中所有出栈的元素。栈O中存储P个元素,然后将栈O中的所有元素出栈,放至缓冲栈P中,然后再将栈O中放入P+1个元素,此时队列的最大容量是2P+1,将栈P中的元素全部出栈,然后再将栈O中的P个元素放至栈P,将栈O中剩余的一个元素出栈,然后再将栈P中所有的元素出栈,所有元素的入栈出栈顺序符合先进先出。

    解析:ABD

    缓存不可见会导致线程安全问题。硬件方面的方案,多线程对共享变量是不可见的,Java方面也提供了两个关键字来保证多线程情况下共享变量的可见性方案。

    volatile关键字

    1)该变量立即刷新到主内存。 

    2)使其他线程的共享变量立即失效。言外之意当其他线程需要的时候再从主内存取。

    synchronized关键字

    不仅是一个轻量级的锁,它适用于所有情况。

    1)在线程加锁时,必须从主内存获取值。

    2)在线程解锁时,必须把共享变量刷新到主内存。

    解析:BCD

    TreeMap

    TreeMap存储K-V键值对,通过红黑树(R-B tree)实现;
    TreeMap继承了NavigableMap接口,NavigableMap接口继承了SortedMap接口,可支持一系列的导航定位以及导航操作的方法,当然只是提供了接口,需要TreeMap自己去实现;
    TreeMap实现了Cloneable接口,可被克隆,实现了Serializable接口,可序列化;
    TreeMap因为是通过红黑树实现,红黑树结构天然支持排序,默认情况下通过Key值的自然顺序进行排序。

    HashMap

    在JDK1.7及之前,是用数组加链表的方式存储的。但是,众所周知,当链表的长度特别长的时候,查询效率将直线下降,查询的时间复杂度为O(n)。因此,JDK1.8 把它设计为达到一个特定的阈值之后,就将链表转化为红黑树。

    HashSet 

    HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。HashSet 允许有 null 值。HashSet 是无序的,即不会记录插入的顺序。HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。HashSet 实现了 Set 接口。

    解析:ABCDE

    解析:

    1. SELECT site_name FROM site WHERE id IN(SELECT site_id FROM visit GROUP BY site_id ORDER BY COUNT(DISTINCT user_id) DESC LIMIT 3);
    2. SELECT site_name FROM site WHERE id IN(SELECT site_id FROM visit GROUP BY site_id ORDER BY COUNT(user_id) DESC LIMIT 3);
  • 相关阅读:
    在字节干了两年离职后,一口气拿到15家Offer
    linux-守护进程daemon
    HECTF2022
    Fastjson反序列化分析
    C语言写二叉树
    Haskell网络编程:从数据采集到图片分析
    基于Python实现的词汇相似度计算
    Python模拟登录豆瓣:轻松探索海量文化资源!
    猿创征文| JAVA Web的环境部署
    安装Jupyter可能会出现的问题
  • 原文地址:https://blog.csdn.net/qq_63514555/article/details/126075367