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)静态包含不会检查所含文件的变化,适用 ...
随机推荐
- ue4 重新生成ide project文件的命令行
有时候换了机器,工程文件没了,通常是在编辑器里有个菜单项可以生成 但是有时编辑器自身都编不过,没法运行 这时需要调试代码,可以用命令行生成相应的工程文件: ../UnrealEngine/Genera ...
- int main(int argc,char* argv[])详解
argc是命令行总的参数个数 argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数命令行后面跟的用户输入的参数, 比如: int main(int argc, ...
- 分组 cube rollup NVL (expr1, expr2)
cube rollup NVL (expr1, expr2)->expr1为NULL,返回expr2:不为NULL,返回expr1.注意两者的类型要一致 NVL2 (expr1, expr2, ...
- Numpy 学习之路(1)——数组的创建
数组是Numpy操作的主要对象,也是python数据分析的主要对象,本系列文章是本人在学习Numpy中的笔记. 文章中以下都基于以下方式的numpy导入: import numpy as np fro ...
- JS组件系列——封装自己的JS组件
前言:之前分享了那么多bootstrap组件的使用经验,这篇博主打算研究下JS组件的扩展和封装,我们来感受下JQuery为我们提供$.Extend的神奇,看看我们怎么自定义自己的组件,比如我们想扩展一 ...
- nio加强服务端并发
究了一下Android推送,方式很多,比如用框架或者用第三方服务,在此并不讨论个中优劣.抱着学习的态度,本人不太喜欢用一些现成的东西,所以自己动手实现了一套简单的推送机制.使用TCP长连接,完成服务器 ...
- UIAlertController、UIAlertAction 警告框
NS_CLASS_AVAILABLE_IOS(8_0) @interface UIAlertAction : NSObject <NSCopying> //创建操作 + (instan ...
- js原生实现选项卡功能
选项卡在js中是一个重要的知识点.他没有那么难,但在工作中却有重要的位置.几乎在每一个网站都能看到选项卡的实例.所以今天写一下选项卡的实现. 我们设想有三个按钮分别来控制三个盒子当我们点击当前的按钮的 ...
- Mvc模板页
以前学过WEB的应该都知道母版页这个东西,在这里呢,mvc的模板页和WEB中的模板页也是一样的效果和用途. 首先:创建一个项目,控制器,生成Index视图,在生成视图的时候我们选择Razor视图引擎, ...
- __attribute__((packed))详解
1. __attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法.这个功能是跟操作系统没关系,跟编译器有关 ...