今天参加金山的校园招聘,java笔试,回来仔细研究实现一下:

题目1:工厂两条生产线,三个工人,生产线上可以最多存放m个产品,当生产线满时,机器停止生产,等产品线不满时才继续生产,每条产线上一次只能允许一个工人取产品,编程实现该过程,使整个生产线能流畅 运行。

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue; //多线程(生产者消费者问题)
class Producer extends Thread {
//使用阻塞队列(BlockingQueue)控制线程通信
private BlockingQueue<String>bq;
public Producer(BlockingQueue<String> bq){
this.bq = bq;
}
public void run(){
//用于生产的元素
String[] strArr = new String[]{
"Java",
"Structs",
"Spring"
};
for(int i = 0;i<9;i++){
System.out.println(getName()+"生产者准备生产集合元素");
try{
Thread.sleep(200);
//尝试放入元素,如果队列已满,则线程被阻塞
bq.put(strArr[i%3]);
}catch(Exception ex){
ex.printStackTrace();
}
System.out.println(getName()+"生产完成:"+bq);
}
}
} class Consumer extends Thread{
private BlockingQueue<String>bq;
public Consumer(BlockingQueue<String>bq){
this.bq = bq;
}
public void run(){
//每条生产线上只允许一个人去取(同步代码块“加锁-修改-释放锁”)
synchronized(bq){
while(true){
System.out.printf(getName()+"消费者准备消费集合元素");
try{
Thread.sleep(200);
//尝试取出元素,如果队列已空,则阻塞该线程
bq.take();
}catch(Exception ex){
ex.getStackTrace();
}
System.out.println(getName()+"消费完成"+bq);
}
}//同步代码块结束,该线程释放同步锁
}
} public class UseBlockingQueue {
public static void main(String[] args){
//创建一个容量为1的BlockingQueue
int m=10;
BlockingQueue<String>bq = new ArrayBlockingQueue<>(m);
//启动2个生产者线程
new Producer(bq).start();
new Producer(bq).start(); //启动一个消费者线程
new Consumer(bq).start();
}
}

题目二:写一个java程序实现ArrayList类,最简单必须实现add()、remove().....

发现网上写成 什么样的都有,于是参考了一下jdk源码,简单实现了一个:

import java.util.AbstractList;
import java.util.List; public class shixianArrayList<E> extends AbstractList<E> implements List<E>{
private transient Object[] elementData;
private int size=0; public shixianArrayList(int initialCapacity){
super();
if(initialCapacity<0){
return ;
}
this.elementData = new Object[initialCapacity];
}
//默认长度为10
public shixianArrayList(){
this(10);
} @Override
public E get(int index) {
// TODO Auto-generated method stub
return null;
}
@Override
public int size() {
// TODO Auto-generated method stub
return size;
} public boolean isEmpty(){
return size ==0;
} public boolean contains(Object o){
return indexOf(o) >=0;
} public int indexOf(Object o){
if(o == null){
for(int i=0;i<size;i++){
if(elementData[i]==null){
return i;
}
}
}else{
for(int i=0;i<size;i++){
if(o.equals(elementData[i]))
return i;
}
}
return -1;
}
//这里是不带索引的add(),带索引的也可以有
public boolean add(E e){ elementData[size++] = e;
return true;
} //这里是直接按照元素删除,按照索引删除的也可以有
public boolean remove(Object o){
if(o == null){
for(int index=0;index<size;index++){
if(elementData[index] == null){
fastRemove(index);
return true;
}
}
}else{
for(int index=0;index<size;index++){
if(o.equals(elementData[index])){
fastRemove(index);
return true;
}
}
}
return false;
} private void fastRemove(int index) {
modCount++;
int numMoved = size-index-1;
if(numMoved>0)
System.arraycopy(elementData, index+1,elementData , index,numMoved);
elementData[--size] = null; //让gc来做这个工作 } public static void main(String[] args){
String[] books = {
"java","structs"
};
shixianArrayList<String> booklist = new shixianArrayList<String>();
for(int i =0;i<books.length;i++){
booklist.add(books[i]);
}
//booklist.remove(books[1]); System.out.println(booklist.toStringFunc());
}
//elementData为Object[]类型,不能直接打印
public String toStringFunc(){
String tempstr="";
for(int i=0;i<this.size;i++){
if(this.elementData[i]!=null){
tempstr+=this.elementData[i];
}
}
return tempstr;
} }

题目三:已知两个字符串由不同的字母组成,一长一短,长的为A,短的为B。若所有在B中出现的字符都在A中出现,则返回true,否则返回false。假设短的长度为m,长的长度为n,要求算法的时间复杂度不能大于O(m+n)。

解法一:最先想到的解法,对字符串B中的每个字母在A中都遍历一遍(但是时间复杂度为O(m*n))

public class BinA {

    public static void main(String[] args){
String[] stra = {"a","a","b","b","b","b","c","d","e","e"};
String[] strb = {"a","a","c","d","e"};
Contain A = new Contain(); System.out.println(A.containStr(stra, strb)); }
} class Contain{
public boolean containStr(String[] stra,String[] strb){
int count=0;
//因为是要把strb中的每个元素拿出来跟stra中的每个元素比,所以要把strb的放在外面的循环
for(int i=0;i<strb.length;i++)
{
for(int j=0;j<stra.length;j++)
{
//因为数组中可能有重复元素,所以只要在stra中找到一个与strb相等的就就跳出来,才能保证count值=length
if(strb[i]==stra[j]){
count++;
j=stra.length;
}
}
}
//count用作计数器,恰好比较了strb。length次说明在stra中每个strb中的数都有相等的了
if(count==strb.length){
return true;
}
return false; }
}

解法二:设一个哈希表,对字符串A的字符遍历,将每个字符对应的哈希表中的值设为1。然后对B中的字符进行遍历,如果所有字符对应的hash值都为1,则返回true,否则返回false。时间复杂度为O(m+n)。

package JingDian;

import java.util.HashMap;

public class HashBinA {

    public static void main(String[] args){
String[] stra = {"a","a","b","b","b","b","c","d","e","e"};
String[] strb = {"a","b","c","d","e"};
hashSolve hs = new hashSolve();
System.out.println(hs.hashBinA(stra, strb)); } } class hashSolve{
public boolean hashBinA(String[] stra,String[] strb){
HashMap<String, Integer> hm = new HashMap<String, Integer>();
int count=0;
for(int i=0;i<stra.length;i++)
{
hm.put(stra[i], 1);
}
for(int j=0;j<strb.length;j++)
{
//若strb中存在stra中没有的keyget()方法会返回空而报空指针错误,因此要判断是否为空
if(hm.get(strb[j])!=null&&hm.get(strb[j])==1){
count += 1; }
}
//count只是一个计数器,如果每一个strb中字母得到的value都为一(都在stra中)则其长度为strb。length
if(count == strb.length)
{
return true;
} return false;
} }

java笔试题(金山网络)的更多相关文章

  1. 2016最新Java笔试题集锦

    更新时间:2015-08-13         来源:网络         投诉删除 [看准网(Kanzhun.com)]笔试题目频道小编搜集的范文“2016最新Java笔试题集锦”,供大家阅读参考, ...

  2. Java笔试题集锦

    Java笔试题集锦 1.MVC的各个部分都有那些技术来实现?怎样实现? 答:MVC是Model-View-Controller的简写."Model" 代表的是应用的业务逻辑(通过J ...

  3. java笔试题13-11-21

    中xxx科技公司java笔试题 今天去参加一个公司的面试,去先做了一份笔试题,妈的,太他妈难了(对于我来说,最后做完一个员工说你是不是投错简历了,都是空白,我说我做的大部分都对了..最后面试都没有,就 ...

  4. 华为Java笔试题

    华为Java笔试题+数据库题 一. 单项选择题 1.Java是从( )语言改进重新设计. A.Ada B.C++ C.Pasacal D.BASIC 2.下列语句哪一个正确( ) A. Java程序经 ...

  5. java面试题—精选30道Java笔试题解答(二)

    摘要: java面试题-精选30道Java笔试题解答(二) 19. 下面程序能正常运行吗() public class NULL { public static void haha(){ System ...

  6. 北京Java笔试题整理

    北京Java笔试题整理 1.什么是java虚拟机?为什么ava被称作是"平台无关的编程语言? 答:Java虚拟机可以理解为一个特殊的"操作系统",只是它连接的不是硬件,而 ...

  7. 【笔试题】精选30道Java笔试题解答

    转自于:精选30道Java笔试题解答 精选30道Java笔试题解答 1. 下面哪些是Thread类的方法() A. start() B. run() C. exit() D. getPriority( ...

  8. 精选30道Java笔试题附答案分析

    精选30道Java笔试题解答 都是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我一样参加各大IT校园招聘的同学们,纯考Java基础功底,老手们就不用进来了,免得笑 ...

  9. 分享一套高级Java笔试题(实拍高清图)

    分享一套高级Java笔试题 微信群里群友分享的 刚好他在笔试 有些问题不会发到群里求助 如果你最近正好在面试 需要参考需要提升 这套试题或许对你有用 下面是部分分享原图 下面是微信群中群友的热议 非常 ...

  10. 汉王JAVA笔试题

    汉王JAVA笔试题 1,jsp中动态include与静态include的区别? (1)动态包含总是会检查文件中的变化,适合用于包含动态页面,并且可以带参数. (2)静态包含不会检查所含文件的变化,适用 ...

随机推荐

  1. cx_freeze安装使用

    在windows下 安装比较方便又专门的安装包 然后cmd 进入 c:\python33\Scripts >cxfreeze E:\main.py --target-dir E:\ 前面是源文件 ...

  2. C# rename方法重命名文件

    记得C# File类中是没有rename这个方法 所以网上很多都用的是move moveTo copy+delete等这些方法 其实以上的方法 虽然可以实现功能 但看起来总觉得很蛋疼 今天百度 突然发 ...

  3. Crystal Reports拉报表报错:Error detected by database DLL

    问题描述: 最近在使用Crystal Reports打印报表时,提示错误信息:"Error detected by database DLL." 如下图: 经查找,是因为数据库名称 ...

  4. 产生NaN

    1.数学运算失败  数字+undefind=NaN 2.数据类型转化失败产生NaN isNaN()检查 是不是一个有效数字,是NaN 返回 ture  ,正常数字返回false.

  5. spring官网改版后,如何下载jar包

    http://repo.springsource.org/libs-release-local/org/springframework 通过以上地址,可树型查看所有发布的包 问题是,官网页面上为何找不 ...

  6. ERDAS文件格式:IGE、IMG、RRD、AUX

    ERDAS如果需要打开大于2GB的文件,ERDAS需要把文件转换成IMG格式.这时候,ERDAS自动生成三个文件,分别是IMG.IGE和RRD文件,其中:1.IGE:是数据文件,实际用来存储栅格数据: ...

  7. 谁动了我的特征?——sklearn特征转换行为全记录

    目录 1 为什么要记录特征转换行为?2 有哪些特征转换的方式?3 特征转换的组合4 sklearn源码分析 4.1 一对一映射 4.2 一对多映射 4.3 多对多映射5 实践6 总结7 参考资料 1 ...

  8. EDA技术与ASIC设计和FPGA开发有什么关系?FPGA在ASIC设计中有什么用途?

    利用EDA技术进行电子系统设计的最后目标是完成专用集成电路ASIC的设计和实现:FPGA和CPLD是实现这一途径的主流器件.FPGA和CPLD通常也被称为可编程专用IC,或可编程ASIC.FPGA和C ...

  9. Add more security in Visual Studio 2012

    Compile flags: /GS: Stack protection from buffer overrun. /SDL: Subset of W3&W4 security warning ...

  10. LightHttpd源码分析

    源码:https://github.com/EZLippi/Tinyhttpd 要在Linux中编译,无需像代码注释所说那样: /* This program compiles for Sparc S ...