程序员笔试主观题

啊南 1787阅读 2020.03.18

【导语】: 想要在众多求职者中脱颖而出,做好主观题也很重要。程序员笔试主观题都有哪些呢?下面为大家整理了程序员笔试主观题,欢迎借阅。

程序员笔试主观题5例

1.请写出一个输出“Hello World!” 的程序。(3分)
    答:public Class Hello World
       {
Public static void main(String[]args)
{
                     System.out.println(“HELLO WOTLD”);
}
       }
2.char型变量中能不能存贮一个中文汉字? 为什么? (3分)
答:能存储一个汉字;因为它能存储四个字节而每个汉字只占两个字节。
3.常见的两种xml解析技术是什么? 区别是什么? (4分)
答:常见的两种有:SAX和DOM。 
区别:SAX 是一种事件驱动的xml解析方式。每次访问一个xml文件中的某个节点的时候,sax就会搜索一遍xml文件,在找到相应的节点后就会触发一个事件来处理请求。只读  
        DOM是一种基于树状的查找方式。DOM会将xml解析成一棵树,存在内存中。开发者可以通过查找树的节点来取得文件的内容或者修改内容。可读写
4.MVC是什么,如何实现? (5分)
答:MVC是一个是一个设计模式,它强制性的使应用程序的输入,处理和输出分开。使用MVC应用程序被分为三个核心部件:M----------MODO模型,V ----------VIEW     试图,C --------- Contral控制
     实现:首先有页面(jsp)发送请求给控制器(servlet),然后由控制器接收用户的请求,并决定应该调用哪个模型(javabean)来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层显示给用户。
5.J2EE是什么?(6分)
答:J2EE 是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。

程序员笔试主观题10例

1. static有什么用途?(请至少说明两种)
1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用
2. 引用与指针有什么区别?
1) 引用必须被初始化,指针不必。
2) 引用初始化以后不能被改变,指针可以改变所指的对象。
3) 不存在指向空值的引用,但是存在指向空值的指针。
3. 描述实时系统的基本特性
在特定时间内完成特定的任务,实时性与可靠性。
4. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?
全局变量储存在静态数据库,局部变量在堆栈。
5. 什么是平衡二叉树?
左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于1。
6. 堆栈溢出一般是由什么原因导致的?
没有回收垃圾资源。
7. 什么函数不能声明为虚函数?
constructor函数不能声明为虚函数。
8. 冒泡排序算法的时间复杂度是什么?
时间复杂度是O(n^2)。
9. 写出float x 与“零值”比较的if语句。
 if(x>0.000001&&x<-0.000001)
10. Internet采用哪种网络协议?该协议的主要层次结构?
Tcp/Ip协议
主要层次结构为: 应用层/传输层/网络层/数据链路层/物理层。

程序员笔试主观题15例

1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?
三根绳,第一根点燃两端,第二根点燃一端,第三根不点第一根绳烧完(30分钟)后, 点燃第二根绳的另一端,第二根绳烧完(45分钟)后,点燃第三根绳子两端,第三根绳烧完(1小时15分)后,计时完成 
2.你有一桶果冻,其中有黄色、绿色、红色三种,闭上眼睛抓取同种颜色的两个。抓取多少个就可以确定你肯定有两个同一颜色的果冻?
根据抽屉原理,4个
3.如果你有无穷多的水,一个3公升的提捅,一个5公升的提捅,两只提捅形状上下都不均匀,问你如何才能准确称出4公升的水?
3升装满;3升-〉5升(全注入);3升装满;3升-〉升(剩1升);5升倒掉;升-〉5 升(注入1升);3升装满;3升-〉5升;完成(另:可用回溯法编程求解)
4. Java中如何实现代理机制(JDK、CGLIB)
JDK动态代理:代理类和目标类实现了共同的接口,用到InvocationHandler接口(重新invoke方法)。
缺点:只能代理接口,不能代理类。
CGLIB动态代理:代理类是目标类的子类, 用到MethodInterceptor接口
5. 多线程的实现方式
继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。
6. 如何停止一个线程
不建议使用Thread的stop,suspend等相关方法(这些都是废弃了的方法,会导致不确定的状态)
可以使用Thread.interrupt()方法,设置中断标注。该方法能参数不同的结果:
1.如果线程处于阻塞在 waitXX(), join(XX), sleep(XX)系统放上,则线程的中断标志会被清楚,并抛出InterruptedException异常。
2.如果线程阻塞在某些IO操作上(如 InterruptibleChannel, Selector),则会设定中断状态,并从IO操作中返回,并抛出相应的异常(ClosedByInterruptException)。
3.普通状态:只会设置interrupt标志(即如果你不做状态检查并做相应的处理,和没有收到是一回事)
4.如果线程已经死亡,则不会有任何效果。
7. 什么是线程安全
线程安全就是多线程访问同一代码,不会产生不确定的结果。
8. 如何保证线程安全
将共享变量变成局部变量,或是用ThreadLocal(其实是一个map,key为thread标识)
使用线程安全的类
自己控制,如加锁等。
9. Synchronized如何使用
synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:
一. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;
二. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;
三. 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类对象;
10. 多线程如何进行信息交互
void notify() 唤醒在此对象监视器上等待的单个线程。
void notifyAll() 唤醒在此对象监视器上等待的所有线程。
void wait() 导致当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法。
void wait(long timeout) 导致当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法,或者超过指定的时间量。
void wait(long timeout, int nanos) 导致当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量。
11. sleep和wait的区别(考察的方向是是否会释放锁)
都会抛出InterruptedException异常
sleep()方法是Thread类中方法,而wait()方法是Object类中的方法。
sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态,在调用sleep()方法的过程中,线程不会释放对象锁。而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备
12. 多线程与死锁
死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。
产生死锁的原因:
一.因为系统资源不足。
二.进程运行推进的顺序不合适。
三.资源分配不当。
13. 如何才能产生死锁
一.互斥条件:所谓互斥就是进程在某一时间内独占资源。
二.不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。
三.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
四.循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
14. 死锁的预防
一.打破互斥条件。即允许进程同时访问某些资源。但是,有的资源是不允许被同时访问的,像打印机等等,这是由资源本身的属性所决定的。所以,这种办法并无实用价值。
二.打破不可抢占条件。即允许进程强行从占有者那里夺取某些资源。就是说,当一个进程已占有了某些资源,它又申请新的资源,但不能立即被满足时,它必须释放所占有的全部资源,以后再重新申请。它所释放的资源可以分配给其它进程。这就相当于该进程占有的资源被隐蔽地强占了。这种预防死锁的方法实现起来困难,会降低系统性能。
三.打破占有且申请条件。可以实行资源预先分配策略。即进程在运行前一次性地向系统申请它所需要的全部资源。如果某个进程所需的全部资源得不到满足,则不分配任何资源,此进程暂不运行。只有当系统能够满足当前进程的全部资源需求时,才一次性地将所申请的资源全部分配给该进程。由于运行的进程已占有了它所需的全部资源,所以不会发生占有资源又申请资源的现象,因此不会发生死锁。
四.打破循环等待条件,实行资源有序分配策略。采用这种策略,即把资源事先分类编号,按号分配,使进程在申请,占用资源时不会形成环路。所有进程对资源的请求必须严格按资源序号递增的顺序提出。进程占用了小号资源,才能申请大号资源,就不会产生环路,从而预防了死锁。
15. 什么叫守护线程,用什么方法实现守护线程
守护线程是为其他线程的运行提供服务的线程。
setDaemon(boolean on)方法可以方便的设置线程的Daemon模式,true为守护模式,false为用户模式。 必须在线程启动前设置才有效