java笔试题(金山网络)
今天参加金山的校园招聘,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笔试题(金山网络)的更多相关文章
- 2016最新Java笔试题集锦
更新时间:2015-08-13 来源:网络 投诉删除 [看准网(Kanzhun.com)]笔试题目频道小编搜集的范文“2016最新Java笔试题集锦”,供大家阅读参考, ...
- Java笔试题集锦
Java笔试题集锦 1.MVC的各个部分都有那些技术来实现?怎样实现? 答:MVC是Model-View-Controller的简写."Model" 代表的是应用的业务逻辑(通过J ...
- java笔试题13-11-21
中xxx科技公司java笔试题 今天去参加一个公司的面试,去先做了一份笔试题,妈的,太他妈难了(对于我来说,最后做完一个员工说你是不是投错简历了,都是空白,我说我做的大部分都对了..最后面试都没有,就 ...
- 华为Java笔试题
华为Java笔试题+数据库题 一. 单项选择题 1.Java是从( )语言改进重新设计. A.Ada B.C++ C.Pasacal D.BASIC 2.下列语句哪一个正确( ) A. Java程序经 ...
- java面试题—精选30道Java笔试题解答(二)
摘要: java面试题-精选30道Java笔试题解答(二) 19. 下面程序能正常运行吗() public class NULL { public static void haha(){ System ...
- 北京Java笔试题整理
北京Java笔试题整理 1.什么是java虚拟机?为什么ava被称作是"平台无关的编程语言? 答:Java虚拟机可以理解为一个特殊的"操作系统",只是它连接的不是硬件,而 ...
- 【笔试题】精选30道Java笔试题解答
转自于:精选30道Java笔试题解答 精选30道Java笔试题解答 1. 下面哪些是Thread类的方法() A. start() B. run() C. exit() D. getPriority( ...
- 精选30道Java笔试题附答案分析
精选30道Java笔试题解答 都是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我一样参加各大IT校园招聘的同学们,纯考Java基础功底,老手们就不用进来了,免得笑 ...
- 分享一套高级Java笔试题(实拍高清图)
分享一套高级Java笔试题 微信群里群友分享的 刚好他在笔试 有些问题不会发到群里求助 如果你最近正好在面试 需要参考需要提升 这套试题或许对你有用 下面是部分分享原图 下面是微信群中群友的热议 非常 ...
- 汉王JAVA笔试题
汉王JAVA笔试题 1,jsp中动态include与静态include的区别? (1)动态包含总是会检查文件中的变化,适合用于包含动态页面,并且可以带参数. (2)静态包含不会检查所含文件的变化,适用 ...
随机推荐
- vps云服务器建站后绑定域名的方法?
有很多的新手站长们,都不知道vps建站后该如何绑定自己的域名,这里就Windows系统的VPS主机利用iis绑定网站域名的方法,简要介绍一下. 通常情况下,我们在使用IIS建站的时候,都会有一步提示, ...
- win10下搭建QTP测试环境
安装环境win 10 64位企业版 个人学习用1..net 3.5无法安装更新问题解决:打开windows update 服务2.win10 安装中提示为了对电脑进行保护,已经阻止此应用,请与管理员联 ...
- 表单验证插件 - formValidator
表单验证插件 - formValidator * 引入formValidator插件文件 * 引入formValidator插件的主文件 * 引入formValidator插件的正则有关文件 * 引入 ...
- AngularJS学习总结
第一章 简单认识AngularJS 1.双向数据绑定 可通过ng-model监控输入 ng-app属性声明所有被其包含的内容都属于这个AngularJs应用,这也是我们在web应用中嵌套Angula ...
- IP地址框
//IP地址框 // 此段代码:独立的获取本机IP地址和计算机名 WORD wVersionRequested; WSADATA wsaData; char name[255]; CString ip ...
- C语言编写的简单的电话本管理系统
#include<stdio.h> #include <string.h> #include<stdlib.h> ; struct person {]; ]; ]; ...
- Oracle中rownum和rowid的理解(转)
本文转自地址http://www.linuxidc.com/Linux/2012-04/58300.htm rownum,rowid都叫伪列. 但是,rownum是逻辑上的编号,且其值总是从1开始,每 ...
- Django-数据模型
修改model.py文件 from django.db import models # Create your models here. class Question(models.Model): q ...
- 给自己的Unity添加声音文件
下面说明一下,在Unity 里是怎么样加载声音文件的. Unity同时支持单声道和立体声音频资产. Unity支持导入以下音频文件格式:.aif, .wav, .mp3, 和 .ogg,和以下音轨模块 ...
- jsti 和EL用法注意点
今天使用stl 结合El做jsp页面展现,出现了个问题,怎么调也调不好,最后将jstl的源码拿来跟踪调了一下才明白其中的道理. 在使用jstl tag <c:forEach var=" ...