java笔试--北京轩宇信息

article/2025/8/25 13:30:15

第一题

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;/*** <p>功能: 编写程序,在C盘根目录下创建文件myFile.txt,文件内容如下,请注意缩进和换行:* Java* C/C++* Python* JavaScripts*/
public class Question1 {public void answer() throws IOException {String fileData = "Java\n" +"C/C++\n" +"Python\n" +"JavaScripts";Files.write(Paths.get("C:\\myFile.txt"), fileData.getBytes());}public static void main(String[] args) throws IOException {new Question1().answer();}
}

第二题 单例模式的程序

/*** 
* <p>功能: 编写单例模式的程序 */
public class Question2 {static class Singleton{private static Singleton instance = new Singleton();private Singleton(){}public static Singleton newInstance(){return instance;}}public void answer() {Singleton.newInstance();}
}

第三题 触发StackOverflow

/*** * <p>* 功能: 编写一个程序,在运行时触发StackOverflow* */
public class Question3 {public void answer() {answer();}public static void main(String[] args) {new Question3().answer();}
}

第四题 反射实现

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.List;/*** <p>功能: 使用反射实现如下功能,并运行出正确的结果* <pre>* List<Integer> myList = new ArrayList<Integer>(10);* myList.add(1);* myList.add(3);* myList.add(5);* myList.add(7);* myList.add(9);* myList.add(8);* myList.add(6);* myList.add(4);* myList.add(2);* myList.add(10);* Collections.sort(myList);* System.out.println(myList);* </pre>*/
public class Question4 {public void answer() throws Exception {Class clazz = Class.forName("java.util.ArrayList");Constructor constructor = clazz.getConstructor(int.class);List<Integer> myList = (List<Integer>) constructor.newInstance(10);Method add = clazz.getMethod("add", Object.class);add.invoke(myList, 3);add.invoke(myList, 5);add.invoke(myList, 7);add.invoke(myList, 9);add.invoke(myList, 8);add.invoke(myList, 6);add.invoke(myList, 4);add.invoke(myList, 2);add.invoke(myList, 10);Collections.sort(myList);System.out.println(myList);}public static void main(String[] args) throws Exception {new Question4().answer();}
}

第五题 打印分组信息

/*** <p>功能: 有一个列表含有N个学生,学生可以获取姓名和班级编号,其中姓名为字符串,班级编号为int。* <p>现在对这些学生按班级分组和排序,班级之间按编号递增排序,班级内学生按照姓名字母序排序,然后顺序打印分组信息*/
public class Question5 {List<Student> list = new ArrayList<>();public Question5() {list.add(new Student("ZhangDa", 2));list.add(new Student("ZhangEr", 1));list.add(new Student("ZhangSan", 3));list.add(new Student("LiDa", 4));list.add(new Student("LiEr", 1));list.add(new Student("LiSan", 2));list.add(new Student("LiSi", 3));list.add(new Student("ZhaoLiu", 1));list.add(new Student("WangDa", 2));list.add(new Student("WangEr", 2));list.add(new Student("MutouLiu", 1));list.add(new Student("NiuDa", 4));list.add(new Student("XiongDa", 2));list.add(new Student("XiongEr", 4));}public void answer() {list.stream().sorted((a, b) -> {if (a.classIndex != b.classIndex) {return Integer.compare(a.classIndex, b.classIndex);}return String.CASE_INSENSITIVE_ORDER.compare(a.name,b.name);}).forEach(System.out::println);}public static void main(String[] args) {new Question5().answer();}
}/*** 学生类型供参考*/
class Student {public Student(String name, int classIndex) {super();this.name = name;this.classIndex = classIndex;}String name;int classIndex;@Overridepublic String toString() {return new StringJoiner(", ", Student.class.getSimpleName() + "[", "]").add("name='" + name + "'").add("classIndex=" + classIndex).toString();}
}

第六题 16个线程分别打印A~P,编程实现调度这16个线程,屏幕循环打印10次A-P

import java.util.concurrent.locks.LockSupport;/*** <p>* 功能: 实现16个线程分别打印A~P,编程实现调度这16个线程,屏幕循环打印10次A~P*/
public class Question6 {public void answer() {int charNum = 16;//x个线程int p = 10;//打印x次Thread[] threads = new Thread[charNum];for (int i = 0; i < charNum; i++) {final char c = (char) ('A' + i);int finalI = i;threads[i] = new Thread(() -> {for (int j = 0; j < p; j++) {LockSupport.park();System.out.print(c);LockSupport.unpark(threads[(finalI + 1) % charNum]);}}, String.valueOf(c));}for (int i = 0; i < charNum; i++) {threads[i].start();}LockSupport.unpark(threads[0]);}public static void main(String[] args) {new Question6().answer();}

第七题 圈复杂度计算

控制流图(Control Flow Graph)是以有向图表示程序逻辑结构的一种形式,能够直观展示程序的分支、跳转、复杂度等特性,是编译优化、程序分析、软件测试等领域的一种基本程序中间表示。
圈复杂度是用于评价函数复杂度的一种指标,一般认为圈复杂度越高,说明函数越复杂、越难以维护或测试。圈复杂度的一种计算方法是:
圈复杂度 = 控制流图中分支节点个数+1
分支节点是指含 if,else if,for,while,switch 语句的节点,即在控制流图中有多个后
继节点的节点。
下图所示为一个 C 语言函数 func 和其对应的控制流图。
在这里插入图片描述

/*** <p>* 功能: 计算程序的圈复杂度* <p>* 控制流图(CFG,Control Flow Graph)是以有向图表示程序逻辑结构的一种形式,* 能够直观展示程序的分支、跳转、复杂度等特性,是编译优化、程序分析、软件测试等 领域的一种基本程序中间表示。* <p>* 圈复杂度是用于评价函数复杂度的一种指标,一般认为圈复杂度越高,说明函数越 复杂、越难以维护或测试。圈复杂度的一种计算方法是:** <pre>* 圈复杂度 = 控制流图中分支节点个数 + 1* </pre>* <p>* 分支节点是指含if,else if,for,while语句的节点,即在控制流图中有多个后继节点的节点。* <p>* 理解上述概念,编写一个函数int calculateMcCabe(GraphNode* entry),输入控制流图的入口节点entry,输出其对应的圈复杂度。 当参数为非法情况时返回0。*/
public class Question7 {public Question7() {}/*** 题目提供的CFG构造方法,不要修改,返回CFG的入口节点*/static CFGNode buildCFG() {CFGNode entry = new CFGNode("entry");CFGNode exit = new CFGNode("exit");CFGNode count__0 = new CFGNode("int count = 0; int i =0");CFGNode for_a_lt_0 = new CFGNode("for(.. ;i < 100; ..");CFGNode i_inc = new CFGNode("for(..;.. ; i++");CFGNode if_a_lt_0 = new CFGNode("if (i < 0)");CFGNode return0 = new CFGNode("return 0");CFGNode if_i_mod_7_eq_0 = new CFGNode("if (i % 7 == 0) ");CFGNode count_inc_i = new CFGNode("count += i");CFGNode if_count_mod_2_eq_0 = new CFGNode("if (count % 2 == 0)");CFGNode return1 = new CFGNode("return 1");CFGNode return2 = new CFGNode("return 2");entry.addNext(count__0);count__0.addNext(for_a_lt_0);for_a_lt_0.addNext(if_a_lt_0);for_a_lt_0.addNext(if_count_mod_2_eq_0);if_a_lt_0.addNext(return0);if_a_lt_0.addNext(if_i_mod_7_eq_0);if_count_mod_2_eq_0.addNext(return1);if_count_mod_2_eq_0.addNext(return2);if_i_mod_7_eq_0.addNext(count_inc_i);if_i_mod_7_eq_0.addNext(i_inc);count_inc_i.addNext(i_inc);i_inc.addNext(for_a_lt_0);return0.addNext(exit);return1.addNext(exit);return2.addNext(exit);return entry;}/*** 完成下面的方法,返回正确的圈复杂度*/public static int calculateMcCabe(CFGNode entry) {Set<String> set = Arrays.stream(new String[]{"if", "else", "for", "while"}).collect(Collectors.toSet());Queue<CFGNode> queue = new LinkedList<>();queue.add(entry);int ans = 0;Set<CFGNode> visited = new HashSet<>();visited.add(entry);while (!queue.isEmpty()) {int size = queue.size();for (int i = 0; i < size; i++) {CFGNode poll = queue.poll();for (String s : set) {if (poll.data.contains(s)) {ans++;break;}}for (CFGNode e : poll.nextList) {if (!visited.contains(e)) {visited.add(e);queue.add(e);}}}}return ans+1;}public static void main(String[] args) {CFGNode entry = buildCFG();System.out.println("该程序的圈复杂度为:" + calculateMcCabe(entry) + "\n");}
}/*** CFG节点类,表示该节点上的数据和后继节点, 可根据需要补充方法和成员*/
class CFGNode {String data; // 节点数据Collection<CFGNode> nextList; // 后继节点列表public CFGNode(String data) {super();this.data = data;this.nextList = new ArrayList<>();}public void addNext(CFGNode next) {this.nextList.add(next);}
}

http://chatgpt.dhexx.cn/article/J8vum1ka.shtml

相关文章

笔试——中兴

参考达尔文公众号&#xff1a;https://mp.weixin.qq.com/s?__bizMzg5MDIwNjIwMA&mid2247496018&idx1&snf8109b6f5b5ea3a175e52eb7074bb7bc&chksmcfe293c5f8951ad3570a64a07ce0deba1ec12f3c8d0a15bbf1c64ed25e5faca46ef5974fef72&mpshare1&scene23&…

中兴2016笔试题答案Java_中兴Java笔试题

中兴Java笔试题 一、选择题(每题4分,共80分) 1. 编译Java Application 源程序文件将产生相应的字节码文件&#xff0c;这些字节码文件的扩展名为( ) A. .java B. .class C. .html D. . 2. main方法是Java Application程序执行的入口点&#xff0c;关于main方法的方法头以下哪项…

中兴通讯2013校招软件笔试题

关于const的实现机制&#xff0c;请看&#xff1a; http://blog.csdn.net/syzcch/article/details/8182184 define宏定义那个题&#xff1a; http://zhidao.baidu.com/link?urltSvmJ_ytFjwWKBLzDgCfLfW-mdJtTChTab3XzBAbd2x1nGYQCGnqDq__9-dqc_ndlWE1uPeaFcyVXlKOn1CAha …

中兴笔试程序题

文本编辑器&#xff08;15&#xff09; 要求&#xff1a; &#xff08;1&#xff09;编辑文本&#xff1b; &#xff08;2&#xff09;保存、打开指定位置的文本文件&#xff1b; &#xff08;3&#xff09;具有输入输出界面。 代码&#xff1a;&#xff08;此代码在vc6.…

中兴2016校招软件在线笔试题

面试经验可以参考我的另一篇文章&#xff0c;是7月初参加openday面试的&#xff0c;文章链接http://blog.csdn.net/dandelion1314/article/details/47009585 招聘群里有人发的招聘时间安排&#xff0c;仅供参考。 据说今年是中兴的第一次在线笔试&#xff0c;摄像头监控&am…

MeasureSpec的理解和详尽源码分析

package cc.ww;import android.view.View; import android.view.View.MeasureSpec; import android.view.ViewGroup.LayoutParams; import android.view.ViewGroup.MarginLayoutParams; import android.widget.LinearLayout;/*** author http://blog.csdn.net/lfdfhl* * 文档描…

自定义View 测量过程(Measure)

目录 一、作用二、储备知识2.2 ViewGroup.LayoutParams2.3 MeasureSpec 三、measure过程详解3.1 单一View的measure过程具体流程源码分析源码总结 3.2 ViewGroup的measure过程测量原理具体流程源码分析流程总结 四、总结 一、作用 测量View的宽 / 高 在某些情况下&#xff0c;…

Android MeasureSpec解析

1. MeasureSpec组成 MeasureSpec是View的一个内部类&#xff0c;由一个32位的int值组成&#xff0c;前两位代表SpecMode测量模式&#xff0c;后30位代表SpecSize大小值。 其中测量模式共有三种&#xff1a; EXACTLY&#xff08;确定&#xff09;&#xff1a;父控件为子View指…

使用View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED)在在onCreate中获得控件的大小问题

android 在onCreate中获得控件的大小 int w View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); int h View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); edt_height.measure(w, h); int height edt_height.getMeasuredHeight(); int w…

MeasureSpec中三种模式:UNSPECIFIED,AT_MOST,EXACTLY

在自定义View和ViewGroup的时候&#xff0c;我们经常会遇到int型的MeasureSpec来表示一个组件的大小&#xff0c;这个变量里面不仅有组件的尺寸大小&#xff0c;还有大小的模式。 这个大小的模式&#xff0c;有点难以理解。在系统中组件的大小模式有三种&#xff1a; 1.精确模式…

评测指标(metrics)

评测指标(metrics) metric主要用来评测机器学习模型的好坏程度,不同的任务应该选择不同的评价指标, 分类,回归和排序问题应该选择不同的评价函数. 不同的问题应该不同对待,即使都是 分类问题也不应该唯评价函数论,不同问题不同分析. 回归(Regression) 均方误差(MSE) (1) l ( y…

MeasureSpec学习—对Integer.MAX_VALUE 2的认识

在自定义View和ViewGroup的时候&#xff0c;我们经常会遇到int型的 MeasureSpec 来表示一个组件的大小&#xff0c;这个变量里面不仅有组件的尺寸大小&#xff0c;还有大小的模式。 这个大小的模式&#xff0c;有点难以理解。在系统中组件的大小模式有三种&#xff1a; 1.精确…

理解Android中的MeasureSpec

文章收藏的好句子&#xff1a;永远要相信美好的事情即将发生。 ps&#xff1a;本文源码是基于 Android Api 31 来分析的 目录 1、MeasureSpec 1、1 SpecMode 1、2 MeasureSpec 的 int 值和 LayoutParams 的对应关系 1、MeasureSpec 我们在 Android 手机上看到的界面&#xff0c…

android Measurespec测量模式

MeasureSpecs 类 1、是一个32位的二进制数&#xff0c;由模式&#xff08;mode&#xff09;和大小&#xff08;size&#xff09;组成&#xff0c; 2、其中&#xff1a;32和31位代表测量模式&#xff08;mode&#xff09;、后30位代表测量大小&#xff08;size&#xff09; 3、…

MeasureSpec源码解读

文章目录 MeasureSpec的源码MeasureSpec与LayoutParams 今天来讲讲MeasureSpec吧。因为他与View的测量流程相关性很大&#xff0c;只有正确的理解了MeasureSpec的工作原理&#xff0c;我们才能更好的自定义View。那么MeasureSpec它的作用是什么呢&#xff1f;一般来说&#xff…

理解 MeasureSpec

在开始本篇文章之前&#xff0c;我们先看一段代码&#xff1a; Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {int expendSpec MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);super.onMeasure(widthMe…

对MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE 2, MeasureSpec.AT_MOST)的一点理解

之前 遇到ScrollView中嵌入ListView&#xff0c;GridView冲突的解决&#xff08;让ListView全显示出来&#xff09; 链接 网上查找资料&#xff0c;代码大致如下&#xff1a; import android.content.Context; import android.util.AttributeSet; import android.widget.ListV…

View的基本概念与MeasureSpec

1.基本概念 View的绘制是由measuer、layout、draw三个过程才能完整的绘制一个View&#xff0c;其中measure是测量View的宽、高&#xff0c;layout是为了确认View在父容器所在的位置&#xff0c;draw是负责在屏幕上将View绘制出来。View的绘制流程是从ViewRoot的performTraversa…

Android之:了解MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE 2,MeasureSpec.AT_MOST)

在自定义View和ViewGroup的时候&#xff0c;我们经常会遇到int型的 MeasureSpec 来表示一个组件的大小&#xff0c;这个变量里面不仅有组件的尺寸大小&#xff0c;还有大小的模式。 这个大小的模式&#xff0c;有点难以理解。在系统中组件的大小模式有三种&#xff1a; 1.精确…

Android开发 MeasureSpec介绍

搬家后的博客链接: IT客栈 www.itkezhan.org 在自定义View和ViewGroup的时候&#xff0c;我们经常会遇到int型的MeasureSpec来表示一个组件的大小&#xff0c;这个变量里面不仅有组件的尺寸大小&#xff0c;还有大小的模式。 这个大小的模式&#xff0c;有点难以理解。在系统中…