今天参加金山的校园招聘,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. ReferenceQueue<T>随笔

    参考资料: ReferenceQueue食用手册 java引用食用手册 ReferenceQueue源代码里面很好的展示了java队列的实现思路, 以及多线程观察者的实现思路 多线程观察者实现思路: ...

  2. ADV数字的剪切

    #include <iostream> using namespace std; #define SIZE 9 #define MAXLEN 6 int data[SIZE][MAXLEN ...

  3. freeCodeCamp:Falsy Bouncer

    真假美猴王! 删除数组中的所有假值. 在JavaScript中,假值有false.null.0."".undefined 和 NaN. /*思路 利用布尔值构造filter的测试函 ...

  4. 框架介绍thinkphp

    ThinkPHP是一个免费开源的,快速.简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkPH ...

  5. Python 第五天 模块(2)

    模块,用一砣代码实现了某个功能的代码集合. 有两种存在的方式 1.写到一个文件夹里面 2.py文件 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和 ...

  6. C# 基础(8)--网络编程

    套接字,客户端连接服务器,作为进程通讯机制,是基于描述IP地址和端口,是一个通讯链的句柄,其实质就是两个程序通讯用的. 非常类似于电话插座.双方通话的过程,是一方向电话机发出信号和对方从电话机接受信号 ...

  7. noip2008-t3

    [题目描述] 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n 列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸 ...

  8. Tomcat服务器8080端口占用报错

    报错信息如下: Oct , :: PM org.apache.coyote.AbstractProtocol init SEVERE: Failed to initialize end point a ...

  9. 通过统计用户DNS解析记录,实现监控用户上网行为

    上次通过扫描抓包分析TTL的方式检测公司网络开放的端口,发现没有开放53端口(DNS),也就是在公司内部的主机只能用服务器自动分配的DNS,并且发现这是台内部服务器.今天发现bing上不去,检测后发现 ...

  10. R语言基础绘图

    一.可以通过代码或者图形用户界面保存图形,绘图语句夹在开启目标图形设备语句和关闭图形设备的语句之间: pdf("filename.pdf") png("filename. ...