HT笔试随笔

2024-03-04 04:18
文章标签 笔试 随笔 ht

本文主要是介绍HT笔试随笔,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这里写目录标题

  • 选择
    • 关于ArrayBlockingQueue说法不正确的是?
    • 下面哪个流属于面向字符流
    • 以下关于线程通讯的说法错误的是
    • 在java。util.concurrent.locks.AbstractQueueSychronizer的实现当中,使用了哪种数据结构?
    • 一下代码的运行结果
    • 存在一个变量List strList,循环遍历List正确的项
  • 简答
    • 已知二叉树的前序遍历和中序遍历,求后续遍历?
    • Sychronized和Lock的区别
    • 一道SQL题,找出所有重复的字段,重复的字段仅输出一次
    • 在java.util.ThreadPoolExecutor的构造函数参数中,有corePoolSize、maximumSize、workQueue三个参数,那么当不断往线程池中添加任务时,这三个参数是如何影响线程池中的线程数的?

选择

关于ArrayBlockingQueue说法不正确的是?

  • 其主要应用场景是“生产者-消费者”模型
  • 其是线程安全的
  • 允许元素为null
  • 必须显示的设置容量

并没有无参构造,所以必须要初始化长度,不让他变成一个无边界的数据队列,可能会存在内存过大的问题
内部实现了ReentrantLock锁,所以线程是安全的,

下面哪个流属于面向字符流

  • ObjectInputStream
  • BufferedWriter
  • FileInputStream
  • InputStreamReader

CharArrayReader 从字符数组读取的输入流
BufferedReader 缓冲输入字符流
PipedReader 输入管道
InputStreamReader 将字节转换到字符的输入流
FilterReader 过滤输入流
StringReader 从字符串读取的输入流
LineNumberReader 为输入数据附加行号
PushbackReader 返回一个字符并把此字节放回输入流
FileReader 从文件读取的输入流

以下关于线程通讯的说法错误的是

  • wait()有多个重载的方法,可指定等待时间
  • 可以调用wait()、notify()、notifyAll()三个方法实现线程通讯
  • wait()必须在sychronized方法或者代码块中使用
  • wait()、notify()、notifyAll()是Object类提供的方法、子类可以重写

wait()、notify()、notifyAll()都被final修饰子类不能重写

在java。util.concurrent.locks.AbstractQueueSychronizer的实现当中,使用了哪种数据结构?

  • 数组
  • 哈希表
  • 双向链表
  • 集合

查看源码易知是是双向链表

一下代码的运行结果

public class Demo1 {public static void main(String[] args) {Thread t = new Thread(){@Overridepublic void run(){pong();}};t.run();System.out.println("ping");}static void pong(){System.out.println("pong");}
}

结果就是:
pong
ping

存在一个变量List strList,循环遍历List正确的项

System.out.println("方式一:");Iterator<String> it = strList.iterator();while(it.hasNext()){String str = it.next();System.out.print(str+" ");}System.out.println();System.out.println("方式二:");for(String str:strList){System.out.print(str+" ");}System.out.println();System.out.println("方式三");      //错误!!!!!!!
//        for(int i=0;i<strList.length;i++){
//            String str = strList[i];
//        }System.out.println();System.out.println("方式四:");     //错误!!!!!
//        List.foreach(strList,function(str){
//            
//        });

简答

已知二叉树的前序遍历和中序遍历,求后续遍历?

public class Solution {public static TreeNode reConstructBinaryTree(int[] prev, int[] in) {//不管什么遍历方式,结果长度肯定是一样的,都是总结点数if (prev.length != in.length || prev.length < 1) {return null;}//只有一个节点,那就是根节点if (prev.length == 1) {return new TreeNode(prev[0]);}//在中序遍历结果中找根节点int index = -1;for (int i = 0; i < in.length; i++) {if (in[i] == prev[0]) {index = i;break;}}//没找到,说明数据有问题if (index == -1) {return null;}//找到根节点了TreeNode root = new TreeNode(prev[0]);//得到左子树的前序遍历结果int[] lChildPrev = new int[index];System.arraycopy(prev, 1, lChildPrev, 0, index);//得到左子树的中序遍历结果int[] lChildin = new int[index];System.arraycopy(in, 0, lChildin, 0, index);//通过递归,得到左子树结构root.left = reConstructBinaryTree(lChildPrev, lChildin);//得到右子树的前序遍历结果int[] rChildPrev = new int[in.length - 1 - index];System.arraycopy(prev, index + 1, rChildPrev, 0, in.length - 1 - index);//得到右子树的中序遍历结果int[] rChildin = new int[in.length - 1 - index];System.arraycopy(in, index + 1, rChildin, 0, in.length - 1 - index);//通过递归,得到右子树结构root.right = reConstructBinaryTree(rChildPrev, rChildin);//得到完整的二叉树结构return root;}//测试public static void main(String[] args) {int[] prev = {1, 2, 4, 7, 3, 5, 6, 8};int[] in = {4, 7, 2, 1, 5, 3, 8, 6};TreeNode root = reConstructBinaryTree(prev, in);prevPrintTreeNode(root);System.out.println();inPrintTreeNode(root);}//测试结果
//1 2 4 7 3 5 6 8
//4 7 2 1 5 3 8 6public static void inPrintTreeNode(TreeNode root) {if (root == null) {return;}//运用了递归inPrintTreeNode(root.left);System.out.print(root.val + " ");inPrintTreeNode(root.right);}public static void prevPrintTreeNode(TreeNode root) {if (root == null) {return;}System.out.print(root.val + " ");//运用了递归prevPrintTreeNode(root.left);prevPrintTreeNode(root.right);}public static void postPrintTreeNode(TreeNode root) {if (root == null) {return;}//运用了递归postPrintTreeNode(root.left);postPrintTreeNode(root.right);System.out.print(root.val + " ");}
}class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) {val = x;}
}

Sychronized和Lock的区别

在这里插入图片描述

参考:https://blog.csdn.net/hefenglian/article/details/82383569

一道SQL题,找出所有重复的字段,重复的字段仅输出一次

SELECT  distinct(email) FROM person 

在java.util.ThreadPoolExecutor的构造函数参数中,有corePoolSize、maximumSize、workQueue三个参数,那么当不断往线程池中添加任务时,这三个参数是如何影响线程池中的线程数的?

corePoolSize:

线程池的基本大小,线程池默认初始化线程数;只有在工作队列满了的情况下才在该基础上创建新的线程。

注意:在刚刚创建ThreadPoolExecutor的时候,线程并不会立即启动,而是要等到有任务提交时才会启动,除非调用了prestartCoreThread/prestartAllCoreThreads事先启动核心线程。再考虑到keepAliveTime和allowCoreThreadTimeOut超时参数的影响,所以没有任务需要执行的时候,线程池的大小不一定是corePoolSize。

maximumPoolSize:
线程池中允许的最大线程数,线程池中的当前线程数目不会超过该值。如果队列中任务已满,并且当前线程个数小于maximumPoolSize,那么会创建新的线程来执行任务。

这里要注意的是largestPoolSize,该变量记录了线程池在整个生命周期中曾经出现的最大线程个数。为什么说是曾经呢?因为线程池创建之后,可以调用setMaximumPoolSize()改变运行的最大线程的数目。

poolSize:

线程池中当前线程的数量,当该值为0的时候,意味着没有任何线程,线程池会终止;同一时刻,poolSize不会超过maximumPoolSize。

workQueue:
阻塞队列,队列里存放可执行的线程。

参考: https://blog.csdn.net/aitangyong/article/details/38822505

这篇关于HT笔试随笔的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/771975

相关文章

【秋招笔试】9.07米哈游秋招改编题-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集 100+ 套笔试题,笔试真题 会在第一时间跟新 🍄 题面描述等均已改编,如果和你笔试题看到的题面描述

两道笔试题

“char a='\72'”是什么意思? 这么理解:\为转义字符,\072转义为一个八进制数072,也就是十进制数的58买一送一,将转义字符对照表也一并贴给你吧:转义字符 意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b 退格(BS) 008 \f 换页(FF) 012 \n 换行(LF) 010 \r 回车(CR) 013 \t 水平制表(HT) 009 \v 垂直制表(VT

华为23年笔试题

消息传输 题目描述 在给定的 m x n (1 <= m, n <= 1000) 网格地图 grid 中,分布着一些信号塔,用于区域间通信。 每个单元格可以有以下三种状态:  值 0 代表空地,无法传递信号;  值 1 代表信号塔 A,在收到消息后,信号塔 A 可以在 1ms 后将信号发送给上下左右四个方向的信号塔; 值 2 代表信号塔 B,在收到消息后,信号塔 B 可以在 2ms

实现的动态规划问题华为笔试题C++实现

秋招刷力扣题,我觉得我对动态规划不是熟练,在此处做总结 动态规划(Dynamic Programming,DP)算法通常用于求解某种具有最优性质的问题。在这类问题中,可能会有许多可行解,每一个解都对应一个值,我们希望找到具有最优值的解。我觉得最大的问题就是对问题的分解,分解后的问题与分解前的问题具有相同的决策机制,将决策机制进行抽象,最终可以得到对应的解; 动态规划中开始介绍的爬楼梯等问题,答

某公司笔试编程题

参加了某公司编程题,这些题都来自牛客网,记录总结吧! 一、蛇形矩阵 题目描述 蛇形矩阵是有1开始的自然数依次排列成的一个上三角矩阵. 接口说明 void GetResult(int Num, int* pResult);输入参数:int Num :输入的正整数N输出参数:int *pResult: 指向放蛇形矩阵的字符串指针指针指向的内存区域保证有效 样例输入: 4

CVTE java web后台实习生笔试+技术一面总结

投的第一份简历,也可以说是第一次写笔试和参加面试。题在前面,总结在最后,努力不骗人。 笔试 题型:20道不定项选择题+2道算法题+1道架构设计题 选择题 选择题出的很全面,因为是不定项选择,一道题就可以考很多知识点。 当时做的时候以为笔试都是这么难,做完实验室同学告诉我这个算比较难的了,而且据我观察可能是跟春招找正式offer的一批难度的题。可能最后过的标准不一样吧。 选项信息量很大,

大厂算法例题解之网易2018秋招笔试真题 (未完)

1、字符串碎片 【题目描述】一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,“aaabbaaac” 是由下面碎片组成的:‘aaa’,‘bb’,‘c’。牛牛现在给定一个字符串,请你帮助计算这个字符串的所有碎片的 平均长度是多少。 输入描述: 输入包括一个字符串 s,字符串 s 的长度 length(1 ≤ length ≤ 50),s 只含小写字母(‘a’-‘z’) 输出描述

C++笔试强训12、13、14

文章目录 笔试强训12一、选择题1-5题6-10题 二、编程题题目一题目二 笔试强训13一、选择题1-5题6-10题 二、编程题题目一题目二 笔试强训14一、选择题1-5题6-10题 二、编程题题目一题目二 笔试强训12 一、选择题 1-5题 引用:是一个别名,与其被引用的实体公用一份内存空间,编译器不会给引用变量单独开辟新的空间。A错误 故选A。 A

笔试强训,[NOIP2002普及组]过河卒牛客.游游的水果大礼包牛客.买卖股票的最好时机(二)二叉树非递归前序遍历

目录 [NOIP2002普及组]过河卒 牛客.游游的水果大礼包 牛客.买卖股票的最好时机(二) 二叉树非递归前序遍历 [NOIP2002普及组]过河卒 题里面给的提示很有用,那个马的关系,后面就注意,dp需要作为long的类型。 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息publ

Java笔试面试题AI答之JDBC(3)

文章目录 13. 编写JDBC连Oracle的程序?14. 简述JDBC的主要组件有哪些 ?15. JDBC中如何防止SQL注入攻击?1. 使用预处理语句(PreparedStatement)2. 避免在SQL查询中直接拼接用户输入的数据总结 16. JDBC的脏读是什么?哪种数据库隔离级别能防止脏读?脏读(Dirty Read)哪种数据库隔离级别能防止脏读? 17. 简述JDBC ex