您的当前位置:首页正文

java_公司笔试面试题

2020-04-17 来源:好走旅游网


Java基础方面: 1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不写时默认为friendly 2、ArrayList和Vector的区别,HashMap和Hashtable的区别 答:就ArrayList与Vector主要从二方面来说. 一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的 二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半 就HashMap与HashTable主要从三方面来说。 一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现 二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的 三.值:只有HashMap可以让你将空值作为一个表的条目的key或value 3、char型变量中能不能存贮一个中文汉字 为什么 答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的 4、多线程有几种实现方法,都是什么 同步有几种实现方法,都是什么 答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 同步的实现方面有两种,分别是synchronized,wait与notify 5、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么 答:父类: package test; public class FatherClass { public FatherClass() { System.out.println(\"FatherClass Create\"); } } 子类: package test; import test.FatherClass; public class ChildClass extends FatherClass { public ChildClass() {

System.out.println(\"ChildClass Create\"); }

public static void main(String[] args) {

FatherClass fc = new FatherClass(); ChildClass cc = new ChildClass(); } }

输出结果:

C:\\>java test.ChildClass FatherClass Create FatherClass Create ChildClass Create

6、内部类的实现方式 答:示例代码如下: package test;

public class OuterClass {

private class InterClass {

public InterClass() {

System.out.println(\"InterClass Create\"); } }

public OuterClass() {

InterClass ic = new InterClass();

System.out.println(\"OuterClass Create\"); }

public static void main(String[] args) {

OuterClass oc = new OuterClass(); } }

输出结果:

C:\\>java test/OuterClass InterClass Create OuterClass Create 再一个例题:

public class OuterClass { private double d1 = 1.0; //insert code here }

You need to insert an inner class declaration at line 3. Which two inner class declarations are valid (Choose two.) A. class InnerOne{

public static double methoda() {return d1;} }

B. public class InnerOne{

static double methoda() {return d1;} }

C. private class InnerOne{

double methoda() {return d1;} }

D. static class InnerOne{

protected double methoda() {return d1;} }

E. abstract class InnerOne{

public abstract double methoda(); }

说明如下:

一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员。 故 A、B 错

二.静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;return d1 出错。

故 D 错

三.非静态内部类的非静态成员可以访问外部类的非静态变量。 故 C 正确 四.答案为C、E

7、垃圾回收机制,如何优化程序 希望大家补上,谢谢

8、float型float f=3.4是否正确

答:不正确。精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4

9、介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构) 答:Collection FrameWork如下: Collection ├List

│├LinkedList │├ArrayList │└Vector │ └Stack └Set Map

├Hashtable ├HashMap

└WeakHashMap

Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)

Map提供key到value的映射

10、Java中异常处理机制,事件机制? 11、JAVA中的多形与继承?

希望大家补上,谢谢

12、抽象类与接口?

答:抽象类与接口都用于抽象,但是抽象类(JAVA中)可以有自己的部分实现,而接口则完全是一个标识(同时有多重继承的功能)。

13、Java 的通信编程,编程题(或问答),用JAVA SOCKET编程,读服务器几个字符,再写入本地显示? 答:Server端程序: package test;

import java.net.*; import java.io.*;

public class Server {

private ServerSocket ss; private Socket socket;

private BufferedReader in; private PrintWriter out; public Server() { try {

ss=new ServerSocket(10000); while(true) {

socket = ss.accept();

String RemoteIP = socket.getInetAddress().getHostAddress(); String RemotePort = \":\"+socket.getLocalPort();

System.out.println(\"A client come in!IP:\"+RemoteIP+RemotePort); in = new BufferedReader(new

InputStreamReader(socket.getInputStream())); String line = in.readLine();

System.out.println(\"Cleint send is :\" + line);

out = new PrintWriter(socket.getOutputStream(),true); out.println(\"Your Message Received!\"); out.close(); in.close();

socket.close(); }

}catch (IOException e) {

out.println(\"wrong\"); } }

public static void main(String[] args) {

new Server(); } };

Client端程序: package test; import java.io.*; import java.net.*;

public class Client {

Socket socket;

BufferedReader in; PrintWriter out; public Client() { try {

System.out.println(\"Try to Connect to 127.0.0.1:10000\"); socket = new Socket(\"127.0.0.1\ System.out.println(\"The Server Connected!\");

System.out.println(\"Please enter some Character:\"); BufferedReader line = new BufferedReader(new InputStreamReader(System.in));

out = new PrintWriter(socket.getOutputStream(),true); out.println(line.readLine()); in = new BufferedReader(new

InputStreamReader(socket.getInputStream())); System.out.println(in.readLine()); out.close(); in.close();

socket.close();

}catch(IOException e) {

out.println(\"Wrong\"); } }

public static void main(String[] args) {

new Client(); } };

14、用JAVA实现一种排序,JAVA类实现序列化的方法(二种)? 如在COLLECTION框架中,实现比较要实现什么样的接口? 答:用插入法进行排序代码如下 package test;

import java.util.*; class InsertSort {

ArrayList al;

public InsertSort(int num,int mod) {

al = new ArrayList(num);

Random rand = new Random(); System.out.println(\"The ArrayList Sort Before:\"); for (int i=0;i { al.add(new Integer(Math.abs(rand.nextInt()) % mod + 1)); System.out.println(\"al[\"+i+\"]=\"+al.get(i)); } } public void SortIt() { Integer tempInt; int MaxSize=1; for(int i=1;i=((Integer)al.get(MaxSize-1)).intValue()) { al.add(MaxSize,tempInt); MaxSize++; System.out.println(al.toString()); } else { for (int j=0;j { if (((Integer)al.get(j)).intValue()>=tempInt.intValue()) { al.add(j,tempInt); MaxSize++; System.out.println(al.toString()); break; } } } } System.out.println(\"The ArrayList Sort After:\"); for(int i=0;i15、编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。 答:代码如下: package test; class SplitString { String SplitStr; int SplitByte; public SplitString(String str,int bytes) { SplitStr=str; SplitByte=bytes; System.out.println(\"The String is:'\"+SplitStr+\"';SplitBytes=\"+SplitByte); } public void SplitIt() { int loopCount; loopCount=(SplitStr.length()%SplitByte==0) (SplitStr.length()/SplitByte):(SplitStr.length()/Split Byte+1); System.out.println(\"Will Split into \"+loopCount); for (int i=1;i<=loopCount ;i++ ) { if (i==loopCount){ System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length())); } else { System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte))); } } } public static void main(String[] args) { SplitString ss = new SplitString(\"test中dd文dsaf中男大3443n中国43中国人 0ewldfls=103\ ss.SplitIt(); } } 16、JAVA多线程编程。 用JAVA写一个多线程程序,如写四个线程,二个加1,二个对一个变量减一,输出。 希望大家补上,谢谢

17、STRING与STRINGBUFFER的区别。 答:STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法 Jsp方面 1、jsp有哪些内置对象 作用分别是什么 答:JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): request 用户端请求,此请求会包含来自GET/POST请求的参数 response 网页传回用户端的回应 pageContext 网页的属性是在这里管理 session 与请求有关的会话期 application servlet 正在执行的内容 out 用来传送回应的输出 config servlet的构架部件 page JSP网页本身 exception 针对错误网页,未捕捉的例外 2、jsp有哪些动作 作用分别是什么 答:JSP共有以下6种基本动作 jsp:include:在页面被请求的时候引入一个文件。 jsp:useBean:寻找或者实例化一个JavaBean。 jsp:setProperty:设置JavaBean的属性。 jsp:getProperty:输出某个JavaBean的属性。 jsp:forward:把请求转到一个新的页面。 jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记 3、JSP中动态INCLUDE与静态INCLUDE的区别? 答:动态INCLUDE用jsp:include动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数 静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面 4、两种跳转方式分别是什么 有什么区别 答:有两种,分别为: 前者页面不会转向include所指的页面,只是显示该页的结果,主页面还是原来的页面。执行完后还会回来,相当于函数调用。并且可以带参数.后者完全转向新页面,不会再回来。相当于go to 语句。 Servlet方面 1、说一说Servlet的生命周期 答:servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。 2、Servlet版本间(忘了问的是哪两个版本了)的不同

希望大家补上,谢谢 3、JAVA SERVLET API中forward() 与redirect()的区别? 答:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。 4、Servlet的基本架构 public class ServletName extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } } Jdbc、Jdo方面 1、可能会让你写一段Jdbc连Oracle的程序,并实现数据查询. 答:程序如下: package hello.ant; import java.sql.*; public class jdbc { String dbUrl=\"jdbc:oracle:thin:@127.0.0.1:1521:orcl\"; String theUser=\"admin\"; String thePw=\"manager\"; Connection c=null; Statement conn; ResultSet rs=null; public jdbc() { try{ Class.forName(\"oracle.jdbc.driver.OracleDriver\").newInstance(); c = DriverManager.getConnection(dbUrl,theUser,thePw); conn=c.createStatement(); }catch(Exception e){ e.printStackTrace(); } } public boolean executeUpdate(String sql) { try { conn.executeUpdate(sql);

return true; } catch (SQLException e) { e.printStackTrace(); return false; } } public ResultSet executeQuery(String sql) { rs=null; try { rs=conn.executeQuery(sql); } catch (SQLException e) { e.printStackTrace(); } return rs; } public void close() { try { conn.close(); c.close(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { ResultSet rs; jdbc conn = new jdbc(); rs=conn.executeQuery(\"select * from test\"); try{ while (rs.next()) { System.out.println(rs.getString(\"id\")); System.out.println(rs.getString(\"name\")); } }catch(Exception e) { e.printStackTrace(); } } }

2、Class.forName的作用 为什么要用 答:调用该访问返回一个以字符串指定类名的类的对象。 3、Jdo是什么 答:JDO是Java对象持久化的新的规范,为java data object的简称,也是一个用于存取某种数据仓库中的对象的标准化API。JDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如JDBC API的使用)。这些繁琐的例行工作已经转移到JDO产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上。另外,JDO很灵活,因为它可以在任何数据底层上运行。JDBC只是面向关系数据库(RDBMS)JDO更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML以及对象数据库(ODBMS)等等,使得应用可移植性更强。 4、在ORACLE大数据量下的分页解决方法。一般用截取ID方法,还有是三层嵌套方法。 答:一种分页方法 //输出内容 //输出翻页连接 合计:/第一页< P> href=\"List.jsp page=\">上一页 [] 下一页最后页 Xml方面 1、xml有哪些解析技术 区别是什么 答:有DOM,SAX,STAX等 DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问 STAX:Streaming API for XML (StAX) 2、你在项目中用到了xml技术的哪些方面 如何实现的 答:用到了数据存贮,信息配置两方面。在做数据交换平台时,将不能数据源的数据组装成XML文件,然后将XML文件压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再同XML文件中还原相关信息进行处理。在做软件配置时,利用XML可以很方便的进行,软件的各种配置参数都存贮在XML文件中。 3、用jdom解析xml文件时如何解决中文问题 如何解析 答:看如下代码,用编码方式加以解决 package test; import java.io.*;

public class DOMTest {

private String inFile = \"c:\\\\people.xml\"; private String outFile = \"c:\\\\people.xml\"; public static void main(String args[]) {

new DOMTest(); }

public DOMTest() { try {

javax.xml.parsers.DocumentBuilder builder =

javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder();

org.w3c.dom.Document doc = builder.newDocument(); org.w3c.dom.Element root = doc.createElement(\"老师\"); org.w3c.dom.Element wang = doc.createElement(\"王\"); org.w3c.dom.Element liu = doc.createElement(\"刘\");

wang.appendChild(doc.createTextNode(\"我是王老师\")); root.appendChild(wang); doc.appendChild(root);

javax.xml.transform.Transformer transformer =

javax.xml.transform.TransformerFactory.newInstance().newTransformer();

transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, \"gb2312\");

transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, \"yes\");

transformer.transform(new javax.xml.transform.dom.DOMSource(doc), new

javax.xml.transform.stream.StreamResult(outFile)); }

catch (Exception e) {

System.out.println (e.getMessage()); } } }

4、编程用JAVA解析XML的方式.

答:用SAX方式解析XML,XML文件如下:

王小明

信息学院 6258113

男,1955年生,博士,95年调入海南大学

事件回调类SAXHandler.java import java.io.*;

import java.util.Hashtable; import org.xml.sax.*;

public class SAXHandler extends HandlerBase {

private Hashtable table = new Hashtable(); private String currentElement = null; private String currentValue = null; public void setTable(Hashtable table) {

this.table = table; }

public Hashtable getTable() {

return table; }

public void startElement(String tag, AttributeList attrs) throws SAXException {

currentElement = tag; }

public void characters(char[] ch, int start, int length) throws SAXException {

currentValue = new String(ch, start, length); }

public void endElement(String name) throws SAXException {

if (currentElement.equals(name))

table.put(currentElement, currentValue); } }

JSP内容显示源码,SaxXml.jsp:

EJB方面 1、EJB2.0有哪些内容 分别用在什么场合 EJB2.0和EJB1.1的区别 答:规范内容包括Bean提供者,应用程序装配者,EJB容器,EJB配置工具,EJB服务提供者,系统管理员。这里面,EJB容器是EJB之所以能够运行的核心。EJB容器管理着EJB的创建,撤消,激活,去活,与数据库的连接等等重要的核心工作。JSP,Servlet,EJB,JNDI,JDBC,JMS..... 2、EJB与JAVA BEAN的区别? 答:Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。 3、EJB的基本架构 答:一个EJB包括三个部分: Remote Interface 接口的代码 package Beans; import javax.ejb.EJBObject; import java.rmi.RemoteException; public interface Add extends EJBObject { //some method declare } Home Interface 接口的代码 package Beans; import java.rmi.RemoteException; import jaax.ejb.CreateException; import javax.ejb.EJBHome; public interface AddHome extends EJBHome { //some method declare } EJB类的代码 package Beans; import java.rmi.RemoteException; import javax.ejb.SessionBean; import javx.ejb.SessionContext; public class AddBean Implements SessionBean { //some method declare }

J2EE,MVC方面 1、MVC的各个部分都有那些技术来实现 如何实现 答:MVC是Model-View-Controller的简写。\"Model\" 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), \"View\" 是应用的表示面(由JSP页面产生),\"Controller\" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。 2、应用服务器与WEB SERVER的区别? 希望大家补上,谢谢 3、J2EE是什么? 答:Je22是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。 4、WEB SERVICE名词解释。JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI,WSDL解释。 答:Web Service描述语言WSDL SOAP即简单对象访问协议(Simple Object Access Protocol),它是用于交换XML编码信息的轻量级协议。 UDDI 的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。 5、BS与CS的联系与区别。 希望大家补上,谢谢 6、STRUTS的应用(如STRUTS架构) 答:Struts是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework。 采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。 Struts有如下的主要功能: 一.包含一个controller servlet,能将用户的请求发送到相应的Action对象。 二.JSP自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交互式表单应用。 三.提供了一系列实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息。 设计模式方面 1、开发中都用到了那些设计模式 用在什么场合 答:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。主要用到了MVC的设计模式。用来开发JSP/Servlet或者J2EE的相关应用。简单工厂模式等。

2、UML方面 答:标准建模语言UML。用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,合作图),实现图, JavaScript方面 1、如何校验数字型 var re=/^\\d{1,8}$|\\.\\d{1,2}$/; var str=document.form1.all(i).value; var r=str.match(re); if (r==null) { sign=-4; break; } else{ document.form1.all(i).value=parseFloat(str); } CORBA方面 1、CORBA是什么 用途是什么 答:CORBA 标准是公共对象请求代理结构(Common Object Request Broker Architecture),由对象管理组织 (Object Management Group,缩写为 OMG)标准化。它的组成是接口定义语言(IDL), 语言绑定(binding:也译为联编)和允许应用程序间互操作的协议。 其目的为: 用不同的程序设计语言书写 在不同的进程中运行 为不同的操作系统开发 LINUX方面 1、LINUX下线程,GDI类的解释。 答:LINUX实现的就是基于核心轻量级进程的\"一对一\"线程模型,一个线程实体对应一个核心轻量级进程,而线程之间的管理在核外函数库中实现。 GDI类为图像设备编程接口类库。 Google笔试是没有门槛的。这样说是因为Google根本没有限制笔试的人数,开了N个教室,让N多人参加„„不过笔试本身却有门槛,看了题目就知道。

本来想上午写写的,但是,嗯,出于攒人品的目的,还是等到现在才写——现在,面试通知已经发过,很显然我又被无视了„„OK,那也不错,我也没怎么准备这些东西呢,倒不是说我不重视,而是事情太多„„唔,多少算是一种经验了。

回来说说昨天的笔试。题目的量并不大,除了几个单选题,剩下就是三个编程或算法题。单选就不说了,考得比较基础,涉及C语言常识、数据结构、文法、操作系统,主要说说大题。 大题虽然题型不一,但都有一个重要特点:考递归。精确点说,我每一题都用到了递归。 第一个的题目(嗯,记的不是很完整):

在一棵(排序?)二叉树中搜索指定值,数据结构定义为(唉唉,数据结构的具体名字都不记得了,my god): struct Node {

Node * lnext; Node * rnext; int value; };

函数定义为(情况同上,啥都记不清了): Node * search(Node * root, int value) { }

实现这个search函数。

用递归,经典的树的遍历,pass先。 第二个的题目:

计算Tribonaci队列(嗯,九成九记错了那个单词„„),规则是T(n) = T(n - 1) + T(n - 2) + T(n -3),其中T(0) = T(1) = 1,T(2) = 2。 函数定义:

int Tribonaci(int n) { }

备注,不考虑证整数溢出,尽可能优化算法。

这一题我一看就知道要考什么,很显然的递归定义,但也是很显然的,这里所谓的优化是指不要重复计算。

简单的说,在计算T(n)的时候要用到T(n - 1)、T(n - 2)和T(n - 3)的结果,在计算T(n - 1)的时候也要用到T(n - 2)和T(n - 3)的结果,所以在各项计算的时候必须把以前计算的结果记录下来,去掉重复计算。这里用到的一点小技巧就是要新写一个函数用来做这种事情,嗯,看看我写的代码吧!

/**

Get the value of T(n - 1), and retrieve the result of T(n - 2) and T(n - 3). @param[in] n The n in T(n).

@param[out] mid Value of T(n - 2). @param[out] right Value of T(n - 3). @return Value of T(n - 1). */

int find_trib(int n, int & mid, int & right) {

if (3 == n) {

mid = 1; right = 1; return 2; } else {

int temp;

mid = find_trib(n - 1, right, temp); return mid + right + temp; } } /**

Find value of T(n). @param[in] The n in T(n). @return Value of T(n).

@note T(n) = T(n - 1) + T(n - 2) + T(n - 3) (n > 2) T(0) = T(1) = 1, T(2) = 2. */

int tribonaci(int n) {

if (n < 0) {

// Undefined feature.

return 0; }

if (0 == n || 1 == n) {

return 1; }

if (2 == n) {

return 2; }

int mid, right;

int left = find_trib(n, mid, right); return left + mid + right; }

啊啊,对了,答卷的时候我可没心情写注释„„刚才到VC.Net 2003上测试了一下,貌似没有啥问题。唉,看来我多少还是懂一点算法的„„ 第三个的题目:

在一个无向图中,寻找是否有一条距离为K的路径,描述算法即可,不用实现,分析算法的时间和空间复杂度,尽量优化算法。

OK,这个就是传说中的软肋了„„„„„„我也就不把自己的答案写出来了(丢人啊),虽然后来仔细想想,我那个挫挫的方法也能够用„„只是效率„„ That's all. 粗体文字

这都已经是昨天的事啦。之所以起这个标题是想有朝一日本博的文章也会被搜索引擎搜到,然后访问量就是指数级增长,有没有可能啊。

话说某歌和某度居然在某一天的同一个时间搞宣讲+笔试,只不过一个在就业中心,一个在科学馆,在我XJTU的广袤土地上东西对峙,真是让人不记住鱼和熊掌的故事都难。Google的笔试时间一个月前就确定了,baidu一个周之前才得到消息,所以俺有理由认为,这是百度要问鼎中原的意思啦。够豪迈呀,就不怕人都去了google冷场么?看来百度还是很自信的,赞一

个,况且百度的中文搜索做得不比google差。俺坚决支持民族自己的搜索引擎,虽然事实上俺是去了google 笔试。此事不怪俺,想想科学馆那昏暗的灯光吧,俺觉得,非常及其适合你在台下看着你偶像的脸搞个人崇拜„„

今天听说昨晚百度非常人性化,每人一瓶矿泉水,一块巧克力蛋糕,后来因为天热还每人发了纸巾擦汗,这下俺亏大了„„嘿嘿。

俺本来发文的目的是说下笔试题,想想还是不说了,想知道的可以私下跟俺讨论,题目不难,全做对也不容易,不过错个两三道基本也就kaka了。考察得很全面,算法+数据结构+操作系统+编译原理+网络+离散数学,还居然考了个中断。

笔试之前的宣讲会,略有收获。获知Google全球共有员工12000左右,其中总部8000左右,而google中国,北京195,上海45,台北35,而在一年前这一数字分别是北京100,上海20(这个没记准确),台北10。我得到的唯一结论:google中国还差的远啊,不知道开复能把它做成什么样子,应该不会撤摊子吧。

这是第二次笔试,作个记录,以备日后参考,题目另行记录。 1、 两个二进制数的异或结果

2、 递归函数最终会结束,那么这个函数一定(不定项选择): 1. 使用了局部变量 2. 有一个分支不调用自身

3. 使用了全局变量或者使用了一个或多个参数 3、以下函数的结果? int cal(int x) {

if(x==0) return 0; else

return x+cal(x-1); }

4、 以下程序的结果? void foo(int*a, int* b) {

*a = *a+*b;

*b = *a-*b; *a = *a-*b; }

void main() {

int a=1, b=2, c=3; foo(&a,&b); foo(&b,&c); foo(&c,&a);

printf(\"%d, %d, %d\}

5、下面哪项不是链表优于数组的特点?

1. 方便删除 2. 方便插入 3. 长度可变 4. 存储空间小 6、T(n) = 25T(n/5)+n^2的时间复杂度?

7、n个顶点,m条边的全连通图,至少去掉几条边才能构成一棵树? 8、正则表达式(01|10|1001|0110)*与下列哪个表达式一样? 1.(0|1)* 2.(01|01)* 3.(01|10)* 4.(11|01)* 5.(01|1)* 9、如何减少换页错误? 1. 进程倾向于占用CPU

2. 访问局部性(locality of reference)满足进程要求 3. 进程倾向于占用I/O

4.使用基于最短剩余时间(shortest remaining time)的调度机制 5. 减少页大小

10、实现两个N*N矩阵的乘法,矩阵由一维数组表示 11、找到单向链表中间那个元素,如果有两个则取前面一个

12、长度为n的整数数组,找出其中任意(n-1)个乘积最大的那一组,只能用乘法,不可以用除法。要求对算法的时间复杂度和空间复杂度作出分析,不要求写程序。

早晨看SINA新闻,看到Google品牌价值已经达到664.34亿美元,跃居世界第一位。回忆昨晚陪朋友参加google在北大的招聘会,想和朋友们分享一些特别的感受。总体感觉这是一个无限富有,充满惊喜的公司。

05年9月google开始在北京设立公司,目前已经发展到100名员工。每个工程师将新配2台30inch的液晶显示器。经常到美国,澳洲,韩国,日本,印度等国家TRAVEL,ENJOY great food and drink(喜欢吃喝玩乐),在中国有两名外籍人士,统统讲流利的普通话。其中美国人eric带领的PSO(商务合作工程部)部门,9个人,穿着京剧戏服上班,他扮演孙悟空,开玩笑说穿这些工作服上班还是要花些时间的。

主要笔试考题如下,其他题目是基础题,就不贴出了: 1、假设在n进制下,下面的等式成立,n值是() 567*456=150216

a、 9 b、 10 c、 12 d、 18

2、文法G:S->uvSvu|w所识别的语言是:()

a、uvw*vu b、(uvwvu)* c、uv(uv)*wvu(vu)* d、(uv)*w(vu)* 3、如下程序段输出是:() char str[][10]={\"Hello\char *p=str[0]; count<count<5、写一段程序判断一个有向图G中节点w是否从节点v可达。(如果G中存在一条从v至w的路径就说节点w是从v可达的)。以下算法是用C++写成的,在bool Reachable函数中,你可以写出自己的算法。 class Graph{ public:

int NumberOfNodes();//返回节点的总数

bool HasEdge(int u,int v);//u,v是节点个数,从零开始依次递增,当有一条从u到v的边时,返回true };

bool Reachable(Graph&G, int v, int w){ //请写入你的算法 }

6、给定一棵所有边的长度均为整数的树,现要求延长其中某些边,使得从根到任意节点的路径长度相等。问满足要求的树的边长度之和最小是多少?请写出你的算法,并分析时间复杂度。 欢迎回复,给出你的解答。

从没有找工作经历的我今天参加了Google的笔试,本来还自我感觉良好呢,谁知道考题那是嗷嗷不会啊。

考的几乎都是算法,指针特别的多,不过时间太久不用了都忘记了,数据结构的也不少,考了队列,还有一些编译原理的题,关于表达式的;

三道大题第一个还蛮简单,是向双向列表插入一个节点,第二个问题比较恶心,判断A字符串中的各个字符数目是否不大于B字符串中的各个字符数目,由于没时间了就没写完,第三题更是相当及其以及特别的恶心,找到整数数组中满足A*B=C的元素,而且要更优的,算了半天的时间复杂度还是没写出来。

还是忙该忙的事吧,眼看期末考试了,不能挂课,加油!!!

1、有两根不均匀分布的香,香烧完的时间是一个小时,你能用什么方法来确定一段15分钟的时间?

答:2根香同时点燃,第一根两头都点燃,第二根只点一头, 第一根点完的时候是半个小时,接着把第二根两头都点燃,第二根点完的时候就是15分钟。

2、一个经理有三个女儿,三个女儿的年龄加起来等于13,三个女儿的年龄乘起来等于经理自己的年龄,有一个下属已知道经理的年龄,但仍不能确定经理三个女儿的年龄,这时经理说只有一个女儿的头发是黑的,然后这个下属就知道了经理三个女儿的年龄。请问三个女儿的年龄分别是多少?为什么?

答:2,2,9, 1岁不可能

3、有三个人去住旅馆,住三间房,每一间房$10元,于是他们一共付给老板$30,第二天,老

板觉得三间房只需要$25元就够了于是叫小弟退回$5给三位客人,谁知小弟贪心,只退回每人$1,自己偷偷拿了$2,这样一来便等于那三位客人每人各花了九元,于是三个人一共花了$27,再加上小弟独吞了不$2,总共是$29。可是当初他们三个人一共付出$30那么还有$1呢? 答:没错,三个人付了27块,老板拿了25块,小弟拿了2块

4、有两位盲人,他们都各自买了两对黑袜和两对白袜,八对袜了的布质、大小完全相同,而每对袜了都有一张商标纸连着。两位盲人不小心将八对袜了混在一起。 他们每人怎样才能取回黑袜和白袜各两对呢?

答:不知道,还要仔细想想

5、有一辆火车以每小时15公里的速度离开洛杉矶直奔纽约,另一辆火车以每小时20公里的速度从纽约开往洛杉矶。如果有一只鸟,以30公里每小时的速度和两辆火车同时启动,从洛杉矶出发,碰到另一辆车后返回,依次在两辆火车来回飞行,直到两辆火车相遇,请问,这只小鸟飞行了多长距离?

答:记好两车相遇时间,就是鸟飞行时间,乘以其飞行速度就得到飞行距离。

6、你有两个罐子,50个红色弹球,50个蓝色弹球,随机选出一个罐子,随机选取出一个弹球放入罐子,怎么给红色弹球最大的选中机会?在你的计划中,得到红球的准确几率是多少?

答:不知道,还要仔细想想

7、你有四个装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被污染的重量+1.只称量一次,如何判断哪个罐子的药被污染了? 答:不知道,还要仔细想想

8、你有一桶果冻,其中有黄色,绿色,红色三种,闭上眼睛,抓取两个同种颜色的果冻。抓取多少个就可以确定你肯定有两个同一颜色的果冻? 答:4

9、对一批编号为1~100,全部开关朝上(开)的灯进行以下*作:凡是1的倍数反方向拨一次开关;2的倍数反方向又拨一次开关;3的倍数反方向又拨一次开关„„问:最后为关熄状态的灯的编号。

答:不知道,还要仔细想想

10、想象你在镜子前,请问,为什么镜子中的影像可以颠倒左右,却不能颠倒上下?

答:人的眼睛是左右对称的

11、一群人开舞会,每人头上都戴着一顶帽子。帽子只有黑白两种,黑的至少有一顶。每个人都能看到其它人帽子的颜色,却看不到自己的。主持人先让大家看看别人头上戴的是什幺帽子,然后关灯,如果有人认为自己戴的是黑帽子,就打自己一个耳光。第一次关灯,没有声音。于是再开灯,大家再看一遍,关灯时仍然鸦雀无声。一直到第三次关灯,才有劈劈啪啪打耳光的声音响起。问有多少人戴着黑帽子? 答:3

1 超级失败的1:说8点开始,考试时间100分钟 ,怎么算都是9:10交卷;9点一到匆匆交卷了,晚上躺床上才发现错也;

2 超级失败的2:把自个的生日又记错了;

3 怕怕的发现:发现mm还是超级可怕滴,眼睁睁看着一个骗局,哎,也得谨慎些以防上当受骗啊; 题目如下:

T( 0 ) = 1 ; T(1)=1;T(2)=2;T(n)=T(n-1)+T(n-2)+T(n-3); 用最优方式求T(n) ; int?T(int?n)?{ }

可以用最熟悉的语言写 在考场的第一个做法

?1 public ? class ?T? { ?2 ? public ? int ?t( int ?n) { ?3 ?? if ?(n? == ? 0 )? { ?4 ??? return ? 1 ;

?5 ??} ? else ? if ?(n? == ? 1 )? { ?6 ??? return ? 1 ;

?7 ??} ? else ? if ?(n? == ? 2 )? { ?8 ??? return ? 2 ; ?9 ??} ? else ? {

10 ??? return ?t(n - 1 )? + ?t(n - 2 )? + ?t(n - 3 ); 11 ??} ? 12 ?} 13 }

当时发现时间够用,进行了公式推理,但未得出规律的真谛

每个都与T(3)可以直接发生关系,关系是2的幂次方,但最终没有得出公式 遂改进如下: ?1 public ? class ?T? { ?2 ? public ? int ?t( int ?n) { ?3 ?? if ?(n? == ? 0 )? { ?4 ??? return ? 1 ;

?5 ??} ? else ? if ?(n? == ? 1 )? { ?6 ??? return ? 1 ;

?7 ??} ? else ? if ?(n? == ? 2 )? { ?8 ??? return ? 2 ; ?9 ??} ? else ? {

10 ??? return ? 2 ? * ?t(n - 1 )? - ?t(n - 3 ); 11 ??} ? 12 ?} 13 }

晚上躺床上,怎么可能这样直接呢?

突然想到最起码的一点就是重复数的计算,应该进行保存; 如果正向逐个求然后保存,可行; 如果倒向如何保存,尚未想好

大家来仁者见仁一下哦(有更好的思路的请指点)

public class T {

?Map values = new HashMap(); ?

?public int t(int n){ ??int result = 0; ??if (n == 0) { ??? result = 1; ??} else if (n == 1) { ???result = 1; ??} else if (n == 2) { ???result = 2; ??} else {

???result =? 2 * t(n-1) - t(n-3); ??}

??return result; ?} }

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 一、单选

1、80x86中,十进制数-3用16位二进制数表示为? 2、假定符号-、*、$分别代表减法、乘法和指数运算,且 1)三个运算符优先级顺序是:-最高,*其次,$最低; 2)运算符运算时为左结合。请计算3-2*4$1*2$3的值: (A)4096,(B)-61,(C)64,(D)-80,(E)512 3、下列伪代码中,参数是引用传递,结果是? calc(double p, double q, double r){q=q-1.0;r=r+p} main(){

double a = 2.5, b = 9.0; calc(b-a, a, a); print(a);

}

(A)1.5 (B)2.5 (C)10.5 (D)8 (E)6.5 4、求输出结果: int foo(int x, int y){

if(x <=0 || y <= 0) return 1; return 3 * foo(x - 1, y / 2); }

printf(\"%d\\n\(A)81 (B)27 (C)9 (D)3 (E)1

5、下列哪个数据结构在优先队列中被最广泛使用? (A)堆 (B)数组 (C)双向链表 (D)图 (E)向量

6、以下算法描述了一个在n国元素的双向链表中找到第k个元素的方法(k >= 1且k <= n): 如果k <= n - k,从链表开始往前进k-1个元素。 否则,从终点出发,往回走n - k个元素。 这个算法的时间代价是?

(A)θ(nlogn) (B)θ(max{k, n - k}) (C)θ(k + (n - k)) (D)θ(max{k, k - n}) (E)θ(min{k, n - k})

7、有一个由10个顶点组成的图,每个顶点有6个度,那么这个图有几条边? (A)60 (B)30 (C)20 (D)80 (E)90

8、正则表达式L = x*(x|yx+)。下列哪个字符串不符合L (A)x (B)xyxyx (C)xyx (D)yxx (E)yx

9、为读取一块数据而准备磁盘驱动器的总时间包括

(A)等待时间 (B)寻道时间 (C)传输时间 (D)等待时间加寻道时间 (E)等待时间加寻道时间加传输时间 二、算法

1、打印出一个二叉树的内容。

2、在一个字符串中找到第一个只出现一次的字符。如abaccdeff,输出b。

3、给定一个长度为N的整数数组(元素有正有负),求所有元素之和,最大的一个子数组。分析算法时空复杂度。不必写代码。

附上动态规划做法的答案: 最大子序列 问题:

给定一整数序列A1, A2,... An (可能有负数),求A1~An的一个子序列Ai~Aj,使得Ai到Aj的和最大

例如:整数序列-2, 11, -4, 13, -5, 2, -5, -3, 12, -9的最大子序列的和为21。对于这个问题,最简单也是最容易想到的那就是穷举所有子序列的方法。利用三重循环,依次求出所有子序列的和然后取最大的那个。当然算法复杂度会达到O(n^3)。显然这种方法不是最优的,下面给出一个算法复杂度为O(n)的线性算法实现,算法的来源于Programming Pearls一书。在给出线性算法之前,先来看一个对穷举算法进行优化的算法,它的算法复杂度为O(n^2)。其实这个算法只是对对穷举算法稍微做了一些修改:其实子序列的和我们并不需要每次都重新计算一遍。假设Sum(i, j)是A[i] ... A[j]的和,那么Sum(i, j+1) = Sum(i, j) + A[j+1]。利用这一个递推,我们就可以得到下面这个算法: int max_sub(int a[],int size) {

int i,j,v,max=a[0]; for(i=0;ifor(j=i;jv=v+a[j];//Sum(i, j+1) = Sum(i, j) + A[j+1] if(v>max) max=v; } }

return max; }

那怎样才能达到线性复杂度呢?这里运用动态规划的思想。先看一下源代码实现: int max_sub2(int a[], int size) {

int i,max=0,temp_sum=0; for(i=0;itemp_sum+=a[i]; if(temp_sum>max) max=temp_sum; else if(temp_sum<0) temp_sum=0; }

return max; }

在这一遍扫描数组当中,从左到右记录当前子序列的和temp_sum,若这个和不断增加,那么最大子序列的和max也不断增加(不断更新max)。如果往前扫描中遇到负数,那么当前子序列的和将会减小。此时temp_sum 将会小于max,当然max也就不更新。如果temp_sum降到0时,说明前面已经扫描的那一段就可以抛弃了,这时将temp_sum置为0。然后,temp_sum将从后面开始将这个子段进行分析,若有比当前max大的子段,继续更新max。这样一趟扫描结果也就出来了。

google的魅力就不用词语形容了,从晚上的人气就可见一斑.准点赶到教七,却发现门口已经被人群给赌了,google的工作人员一个劲地劝大家别进去了,理由是\"为了安全\":).也好,不用听开复同学的唠叨.回教三的路上,一打打的人迎面而来,熟悉的,陌生的,本校的,外校的.我彷佛到了麦加,穿梭在朝圣的人流中.但是念佛的人多,成佛的却是寥寥.晚上肯定有四位数的申请者,不过能有多少人登上幸运的快车呢?能突破个位数吗?所谓千军万马过独木桥,找工作,挺残酷!

于我,去参加笔试,更多是一种体验.选择google,权当是我对这家伟大的公司的一点敬意吧! 在软件上,我这样的水平,恐怕连菜鸟也谈不上.那么硬件呢?光学呢?我的竞争力在哪里?不能不说,对于找工作,我是有所恐惧的.现在的选择,也许不过是种逃避.

昨天,zhengzheng说他改变主意,准备工作了,一起走的兄弟,又少了一个.今天,simon说在犹豫是否调整申请的方向,因为他想以后还是进公司的.说起,5年的努力是否值得?未来也许只有上帝知道吧!

乘着脑子还清晰,先把笔试题记下:

9个选择题,2个编程,1个算法.选择题,感觉比较基础,不知里面有没有设地雷?反正没啥印象了.

编程1,打印二叉树,实现语言不限,先后也不限.

编程2,给定一个字符串数组,从中找出第一个只出现一次的字母.

算法题,给定一个整数数组,从中切出一个连续片段,保证其元素和最大.求最优算法,分析时间和空间复杂度.

因篇幅问题不能全部显示,请点此查看更多更全内容