今天参加金山的校园招聘,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. 【转载】最完美解决Nginx部署ThinkPHP项目的办法

    网上通用解决方法的配置如下: server { ... location / { index index.htm index.html index.php; #访问路径的文件不存在则重写URL转交给T ...

  2. R语言读取excel文件的3种方法

    R读取excel文件中数据的方法: 电脑有一个excel文件,原始的文件路径是:E:\R workshop\mydata\biom excel数据为5乘2阶矩阵,元素为                ...

  3. shell学习--grep1

    一. grep的来源 通过ex编辑器来查找某个字串: :/pattern/p 其中p是打印,包含字符串pattern的第一行将被打印:如果需要打印包含pattern的所有行,可以这样: :/g/pat ...

  4. iOS多线程 GCD常见用法

    Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法. dispatch queue分成以下三种: 1)运行在主线程的Main queue,通过dispat ...

  5. 史上最强大网盘,网络上的赚钱神器【Yunfile网盘】,注册就送8元

    YunFile.com,是提供在线存储和文件保存服务最大的网站之一,从2007年创立至今,我们提供免费的和您可以承受的收费服务.这些服务包括高级在线存储/远程备份服务,和先进的上传和下载工具.上百万来 ...

  6. spfa判断负环

    会了spfa这么长时间竟然不会判断负环,今天刚回.. [例题]poj3259 题目大意:当农场主 John 在开垦他的农场时,他发现了许多奇怪的昆虫洞.这些昆虫洞是单向的,并且可以把你从入口送到出口, ...

  7. redis连接超时报错

    应用程序连接redis超时,报错如下: ERROR DubboServerHandler-xxx.xx.xx.52:20880-thread-172 2016-12-21 15:25:20,429 c ...

  8. 升级react 15.4,常见的错误及解决方案

    最近项目由react0.14.X升级到react 15版本,因为react15还是做了一些相对大一点的更新的(详情可以参考一下我的另一篇文章关于react15的一点总结),相对:来说react升级之后 ...

  9. NPOI创建DOCX常用操作【转】

    1.  创建文档 XWPFDocument m_Docx = new XWPFDocument();2.  页面设置 //1‘=1440twip=25.4mm=72pt(磅point)=96px(像素 ...

  10. [转]oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。

    oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 select * from dba_jobs; selec ...