搜狗2015JAVA笔试题解析

需积分: 10 2 下载量 54 浏览量 更新于2024-09-08 收藏 246KB PDF 举报
"搜狗2015年对JAVA工程师进行的笔试题" 这篇资料包含了搜狗公司在2015年对JAVA工程师招聘时的笔试题目。这些题目旨在测试候选人在JAVA编程语言、多线程操作以及正则表达式等方面的基础知识和应用能力。 一、关于Java基础知识 在给定的代码示例中,有一个简单的Java程序: ```java public class Example extends Thread { @Override public void run() { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.print("run"); } public static void main(String[] args) { Example example = new Example(); example.run(); System.out.print("main"); } } ``` 这个程序定义了一个名为`Example`的类,它继承了`Thread`类。在`run`方法中,线程会休眠1秒然后打印"run"。在`main`方法中,创建了一个`Example`对象并调用其`run`方法,然后立即打印"main"。由于`run`方法没有被`start`,而是直接调用,因此它不会以新线程的方式运行,而是作为主线程的一部分。所以,程序的输出是"mainrun",正确答案是A。 二、正则表达式 第二个问题是关于使用正则表达式截取字符串中第一个出现的英文左括号之前的内容。例如,对于字符串"北京市(海淀区)(朝阳区)(西城区)",目标是截取"北京市"。正则表达式应该匹配到第一个"("之前的所有字符。正确答案是A,即`.*?(?=\\())`,这个正则表达式会匹配到直到第一个左括号(`\(`)之前的任意字符,`.*?`表示非贪婪匹配任何字符,`(?=\\())`是一个正向预查,表示查找后面紧跟`\(`的位置。 三、同步方法与字符串操作 第三个题目涉及到Java中的同步方法。给定的代码片段中,`main`方法被声明为`synchronized`,这意味着只有一个线程可以执行该方法。由于`main`方法是静态的,它的锁是类的锁,而不是实例的锁。在这个例子中,由于没有其他线程交互,`HelloSogou`将直接打印,因此正确答案是A。 四、字符编码转换 第四题考察的是字符编码的转换。题目给出的选项是关于从GBK编码转换到UTF-8编码的代码。正确的做法是首先将GBK编码的字节序列转换为字符串,然后再将这个字符串按照UTF-8编码转换回字节序列。正确选项是B: ```java dst = new String(src, "GBK").getBytes("UTF-8"); ``` 五、线程与执行顺序 最后一道题目是一个关于线程执行的问题。创建了一个新的线程并调用了`run`方法,但是没有使用`start`。这意味着`run`方法会在主线程中直接执行,而不是作为一个独立的线程。因此,在`System.out.print("Hello")`执行之前,`Sogou()`方法会先运行。由于`Sogou()`的具体内容未知,我们无法确定输出,但题目已经给出了结果不确定的选项D。 这些题目涵盖了Java基础,多线程,正则表达式,字符编码转换以及线程执行顺序等多个方面,都是JAVA工程师应当熟练掌握的核心技能。