软件研发工程师笔试题目及答案分享

时间:2024-11-04 22:19:56 飞宇 笔试题目 我要投稿
  • 相关推荐

软件研发工程师笔试题目及答案分享

  笔试之前先找些相关公司的笔试题目来练练手吧,做到心里有数总不会错的。以下是由应届毕业生网小编J.L为您整理推荐的笔试题目和笔试经验,欢迎参考阅读。

软件研发工程师笔试题目及答案分享

  软件研发工程师笔试题目及答案分享 1

  请在60分钟内作答

  一、选择题

  1、哪个类是所有异常的基础类 C

  A.String B.Error C.Throwable D.RuntimeException

  2、设float x = 1,y = 2,z = 3,则表达式 y+=z--/++x的值是:(A)

  A. 3.5 B. 3 C. 4 D. 5

  3、下列说法正确的是(B )

  A.在类方法中可用this来调用本类的类方法 B.在类方法中调用本类的类方法时可直接调用

  C.在类方法中只能调用本类中的类方法 D.在类方法中绝对不能调用实例方法

  4、根据下面的程序代码,哪些选项的值返回true

  public class Square {

  long width;

  public Square(long l) {

  width = l;

  }

  public static void main(String arg[]) {

  Square a, b, c;

  a = new Square(42L);

  b = new Square(42L);

  c = b;

  long s = 42L;

  }

  }

  A.a == b; B.s == a; C.b == c; D.a.equals(s)

  equals() 是Object类的一个方法,指示某个其他对象是否与此对象“相等”。由于类 Object 是类层次结构的根类。所以它是每个类的超类。所示每个类都可以重写equals()方法,如String类。如果没有重写(override)新类的 equals(),则该方法和 == 操作符一样在两个变量指向同一对象时返回真,但是Java推荐的是使用equals()方法来判断两个对象的内容是否一样。考察“==”及方法 “equals()”的用法。注意以下几点区别。

  引用类型比较引用;基本类型比较值。

  equals()方法只能比较引用类型,“==”可比较引用及基本类型。

  用equals()方法进行比较时,对类File、String、Date及封装类(Wrapper Class)来说,是比较类型及内容。

  用==”进行比较时,符号两边的数据类型必须一致(可相互转换的基本类型除外),否则编译出错。

  在此题中,因为a,b,c是三个对象面,但是c=b这条语句,将c的内存地址指向了b,所以c和b指向了同一个地址,相当于c和b是同一个对象,由于== 操作符只有当两个变量指向同一对象时返回真,故C是正确的。

  5. 下面选项中,哪个选项的内容可以作为FilEinputStream类的构造方法的参数

  A.File B.String C.InputStream D.FileOutputStream

  主要参考FileInputStream的构造方法,FileInputStream类的构造方法有3个,可接受的参数分别是:File、FileDescriptor、String类的一个对象

  6. 在下面程序标明的位置处插入哪条语句会导致编译错误

  public class FinalUse {

  public static void main(String[] args) {

  int x = 0;

  final int y = 1;

  int[] z = { 2 };

  final int[] n = { 3 };

  Use(x, y, z, n);

  }

  static void Use(final int x, int y, final int[] z, int[] n) {

  // 插入内容

  }

  }

  请选择两个正确的答案:

  A.x++ B.y++ C.y=x D.z[0]++ E.n[0]++ F.z=n

  【试题分析】声明形参的时候可以在方法调用的参数调用之前加上关键字final。final参数也可以叫做空白最终变量,也可以当作常量。即在对其赋值之前(例如方法调用之前),该变量为空(为初始化),赋值之后,在该变量的生存周期内只能调用再也不能改变变量的值。final变量只可以被赋值一次。在方法调用时,final形式参数被赋予实际参数的值。在方法内部,不能对final参数进行重新赋值或者是修改。

  

  在Use方法中,x是final类型的,因此A选项中x++表示是可以改变x的值的,所以A会导致编译错误。y,n[0]是int变量,所以y, n[0]值是可以变化的,因此插入B和E选项都会编译通过的。C选项是把x的值赋给y,改变是y的内容,不会改变x的值,所以插入C选项会编译通过的。在 D选项中,由于z是个int型数组,它是属于复合类型,在进行值传递的时候,传给形参的是地址值,而不是内容,因此final int[] z就表示z数组不能在指向其他的数组对象,但是z数组中的内容是可以改变的,因此z[0]++表示的是内容上的改变,所以是没有错误的,可以编译通过的。 F选项正好与D选项相反,同理,F就是错误的。

  【参考答案】AF

  7.下面程序运行后的结果是什么

  Public class Test{

  Static Boolean foo(char c){

  System.out.print(c);

  Return true;

  }

  Public static void main(String[] argv){

  int i=0;

  For(foo(‘A’);foo(‘B’)&&(i<2);foo(‘C’)){

  i++;

  foo(‘D’);

  }

  }

  }

  A.ABDCBDCB B.ABCDABCD

  C.Compilation fails. D.An exception is thrown at runtime.

  二、代码查错

  1.abstract class Name {

  private String name;

  public abstract boolean isStupidName(String name) {}

  }

  解释何错误 并更正

  大括号错误

  2. public class Something {

  public static void main(String[] args) {

  Something s = new Something();

  System.out.println("s.doSomething() returns " + doSomething());

  }

  public String doSomething() {

  return "Do something ...";

  }

  }

  答案: 错。看上去在main里call doSomething没有什么问题,毕竟两个methods都在同一个class里。但仔细看,main是static的。static method不能直接call non-static methods。可改成"System.out.println("s.doSomething() returns " + s.doSomething());"。同理,static method不能访问non-static instant variable。

  三、简答题

  1、谈谈Collection 和Collections

  2、请说出String与StringBuffer、StringBuilder的区别

  String的`长度是不可变的,StringBuffer的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法。

  3、abstract class(抽象类)和interface(接口)有什么区别

  【试题分析】抽象类的特征如下:

  抽象类和抽象方法都必须用abstract关键字来修饰。

  抽象类不能被实例化,也就是不能用new关键字去产生对象。

  抽象方法只需声明,而不需实现。

  抽象方法必须定义在抽象类中,抽象类的子类必须实现父类中的抽象方法,否则这个子类还是个抽象类。

  接口的特征如下:

  接口没有构造方法。

  接口中声明变量均为终极(final)的、静态(static)的和公共(public)的。

  接口是定义的方法均为抽象的和公共的。

  接口里的数据成员必须初始化,且数据成员均为常量。

  【参考答案】声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

  

  接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效

  4、request.getAttribute() 和 request.getParameter() 有何区别

  5、简述下Servlet生命周期

  6、 谈谈你项目中用到的设计模式及如何使用的

  7、你一般用spring、hibernate、struts做什么

  四、代码实现

  1、编写SQL语句

  Student(S#,Sname,Sage,Ssex) 学生表

  Course(C#,Cname,T#) 课程表

  SC(S#,C#,score) 成绩表

  Teacher(T#,Tname) 教师表

  1) 查询平均成绩大于60分的同学的学号和平均成绩

  select S#,avg(score)

  from sc

  group by S# having avg(score) >60;

  2) 查询所有同学的学号、姓名、选课数、总成绩;

  select Student.S#,Student.Sname,count(SC.C#),sum(score)

  from Student left Outer join SC on Student.S#=SC.S#

  group by Student.S#,Sname

  3) 查询没学过“叶平”老师课的同学的学号、姓名

  select Student.S#,Student.Sname

  from Student

  where S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname=’叶平’);

  2、第1个人10,第2个比第1个人大2岁,依次递推,请用递归方式计算出第8个人多大

  用java语言实现,,请编一段程序实现!

  package cn.itcast;

  import java.util.Date;

  publicclass A1 {

  public static voidmain(String [] args)

  {

  System.out.println(computeAge(8));

  }

  public static int computeAge(intn)

  {

  if(n==1)return 10;

  returncomputeAge(n-1) + 2;

  }

  }

  public static voidtoBinary(int n,StringBuffer result)

  {

  if(n/2 != 0)

  toBinary(n/2,result);

  result.append(n%2);

  }

  3、实现一个快速排序

  本人只研究过冒泡排序、选择排序和快速排序,下面是快速排序的代码:

  public class QuickSort {

  /**

  * 快速排序

  * @param strDate

  * @param left

  * @param right

  */

  public void quickSort(String[] strDate,int left,int right){

  String middle,tempDate;

  int i,j;

  i=left;

  j=right;

  middle=strDate[(i+j)/2];

  do{

  while(strDate[i].compareTo(middle)<0&& i

  i++; //找出左边比中间值大的数

  while(strDate[j].compareTo(middle)>0&& j>left)

  j--; //找出右边比中间值小的数

  if(i<=j){ //将左边大的数和右边小的数进行替换

  tempDate=strDate[i];

  strDate[i]=strDate[j];

  strDate[j]=tempDate;

  i++;

  j--;

  }

  }while(i<=j); //当两者交错时停止

  if(i

  quickSort(strDate,i,right);//从

  }

  if(j>left){

  quickSort(strDate,left,j);

  }

  }

  /**

  * @param args

  */

  public static void main(String[] args){

  String[] strVoid=newString[]{"11","66","22","0","55","22","0","32"};

  QuickSort sort=new QuickSort();

  sort.quickSort(strVoid,0,strVoid.length-1);

  for(int i=0;i

  System.out.println(strVoid[i]+" ");

  软件研发工程师笔试题目及答案分享 2

  一、编程语言类

  题目 1:以下 C++ 代码输出结果是什么?

  #include

  using namespace std;

  int main() {

  int a = 10;

  int &b = a;

  b = 20;

  cout << a << endl;

  return 0;

  }

  答案:20。因为 b 是 a 的引用,对 b 的操作就是对 a 的操作。

  题目 2:在 Java 中,以下代码有什么问题?

  java

  public class Main {

  public static void main(String[] args) {

  int[] array = new int[5];

  System.out.println(array[5]);

  }

  }

  答案:这段代码会抛出 ArrayIndexOutOfBoundsException,因为数组索引是从 0 开始的,长度为 5 的数组最大索引为 4。

  二、数据结构类

  题目 1:简述二叉搜索树(BST)的特点。

  答案:

  若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值。

  若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值。

  它的左、右子树也分别为二叉搜索树。

  题目 2:请用代码实现一个简单的栈(以数组实现为例,使用 Java)。

  java

  class Stack {

  private int[] stackArray;

  private int top;

  public Stack(int capacity) {

  stackArray = new int[capacity];

  top = -1;

  }

  public void push(int element) {

  if (top < stackArray.length - 1) {

  stackArray[++top] = element;

  } else {

  // 可以选择扩展数组或抛出异常表示栈满

  System.out.println("Stack is full.");

  }

  }

  public int pop() {

  if (top >= 0) {

  return stackArray[top--];

  }

  // 可以选择抛出异常表示栈空

  System.out.println("Stack is empty.");

  return -1;

  }

  }

  三、算法类

  题目 1:用 Python 实现快速排序算法。

  python

  def quick_sort(lst):

  if len(lst) <= 1:

  return lst

  pivot = lst[0]

  less = [element for element in lst[1:] if element <= pivot]

  greater = [element for element in lst[1:] if element > pivot]

  return quick_sort(less) + [pivot] + quick_sort(greater)

  题目 2:有一个有序数组,其中某个元素出现次数超过数组长度的一半,请找出这个元素(时间复杂度尽量低,使用 C++)。

  #include

  using namespace std;

  class Solution {

  public:

  int majorityElement(vector& nums) {

  int count = 0;

  int candidate;

  for (int num : nums) {

  if (count == 0) {

  candidate = num;

  }

  if (num == candidate) {

  count++;

  } else {

  count--;

  }

  }

  return candidate;

  }

  };

  四、操作系统类

  题目 1:进程和线程的区别是什么?

  答案:

  进程:是资源分配的'基本单位,拥有独立的地址空间、代码段、数据段等资源。进程间通信相对复杂,如管道、消息队列等。不同进程间相互独立,一个进程崩溃一般不会影响其他进程。

  线程:是 CPU 调度的基本单位,共享所属进程的资源,如内存空间、文件描述符等。线程间通信相对简单,可通过共享变量等方式。一个线程崩溃可能会导致整个进程崩溃。

  题目 2:什么是虚拟内存?

  答案:虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。这种技术可以让系统运行比实际物理内存大得多的程序,提高内存利用率和系统的多任务处理能力。

【软件研发工程师笔试题目及答案分享】相关文章:

热门IT软件的笔试题目分享08-19

思科笔试题,题目答案分享06-16

软件测试笔试题目分享07-06

医药研发总监辉瑞笔试题目分享10-04

中兴笔试题目分享有答案02-14

史上最全软件笔试题目及答案10-09

中创软件笔试主考题目分享07-25

软件测试笔试面试题目分享04-07

迈瑞笔试题目硬件研发工程师09-03