`
myclover
  • 浏览: 195073 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

一些笔试面试题

    博客分类:
  • java
阅读更多
最近有些网友给我QQ上或者在群里问了一些面试题,有些很简单,有些网友觉得较难的或者出现的频率较高的我就总结下,现在把我个人的一些看法给写出来,由于本人水平有限,肯定有不妥之处,请各位大虾批评指正。

package com.myclover.exam;

import java.io.File;
import java.io.FileOutputStream;
import java.math.BigDecimal;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;

/**
 * <pre>
 * java程序员面试笔试的常见编程试题
 * 最近很多网友给我QQ上问一些他们被面到的面试题,下面把一些常见的
 * 频率比较高的给总结出来,通过该类来完成,因为本人水平有限,代码
 * 有什么不妥之处请谅解并指出
 * Blog: http://myclover.iteye.com
 * @author myclover
 * </pre>
 */
@SuppressWarnings("all")
public class ExamArray {
	
	
	/**
	 * 功能描述:
	 *         统计一串字符中每个字符出现的次数,并且进行排序
	 *         比如输入 abbcccddd ,则输出 a(1)b(2)c(3)d(3)
	 *         假如参数是 ddcccbAa 输出格式为:   a(1)b(1)c(3)d(2)A(1)
	 * @param str  字符串
	 * @return  返回值:返回排序并且统计之后的新字符串
	 */
	public static String calStringCounts(String str){
		//对字符串先进行排序
		str = sortString(str);
		int count = 1;
		StringBuffer sb = new StringBuffer();
		int length = str.length();
		for(int i = 0 ; i < length ; i++){
			if(i < (length - 1) && (str.charAt(i) == str.charAt(i+1))){
				count++;
			}else{
				sb.append(str.charAt(i)).append("(").append(count).append(")");
				count = 1;
				continue;
			}
		}
		return sb.toString();
	}
	
	
	/**
	 * 功能描述:
	 *         对一串无序的字符串进行排序,小写字母在大写字母之前
	 * @param str 无序的字符串
	 * @return    返回值:返回排序后的新字符串
	 */
	private static String sortString(String str){
		StringBuffer sb1 = new StringBuffer();
		StringBuffer sb2 = new StringBuffer();
		for(int i = 0 ; i < str.length() ; i++){
			//小写字母
			if((int)str.charAt(i) >= 97){
				sb1.append(str.charAt(i));
			}else{
				//大写字母
				sb2.append(str.charAt(i));
			}
		}
		//把字符串转换成字符数组
		char[] ch1 = sb1.toString().toCharArray();
		char[] ch2 = sb2.toString().toCharArray();
		//对字符数组排序
		Arrays.sort(ch1);
		Arrays.sort(ch2);
		
		return new String(ch1) + new String(ch2);
	}
	
	
	/**
	 * 功能描述:
	 *          判断两个整型数组是否相同,两个整型数组是无序的,可以有重复的
	 *          要求两个数组中重复的元素一致,并且重复的次数一致才算是相同
	 *          使用Arrays类来实现
	 * @param a 整型数组
	 * @param b 整型数组
	 * @return  返回值:如果两个数组相同,则返回true,否则返回false
	 */
	public static boolean isEqualArrayUseArrays(int[] a , int[] b){
		//如果长度不相同,则两个数组肯定不相同
		if(a.length != b.length){
			return false;
		}
		//对两个数组进行排序
		Arrays.sort(a);
		Arrays.sort(b);
		return Arrays.equals(a, b);
	}

	/**
	 * 功能描述:
	 *          判断两个整型数组是否相同,两个整型数组是无序的,可以有重复的
	 *          要求两个数组中重复的元素一致,并且重复的次数一致才算是相同
	 *          并且不能使用javaAPI中的Arrays辅助类实现
	 * @param a 整型数组
	 * @param b 整型数组
	 * @return  返回值:如果两个数组相同,则返回true,否则返回false
	 */
	public static boolean isEqualArray(int[] a , int[] b){
		//如果长度不相同,则两个数组肯定不相同
		if(a.length != b.length){
			return false;
		}
		//这里使用双端队列Deque,ArrayDeque不是线程安全的,jdk1.6版本之后才有
		Deque<Integer> list = initDeque(a);
//		List<Integer> list = initList(a);
		for(Integer s : b){
			if(list.contains((Object)s)){//如果队列中存在,则删除,继续下一次遍历
				 //这里删除指定的元素,如果是整数的话则需要转成Object类型,因为该方法支持按照索引删除
				list.remove((Object)s); 
				continue;
			}else{
				return false;
			}
		}
		//如果最后集合为空,则表示两个数组相同
		if(list.size() <= 0){
			return true;
		}
		return false;
	}
	
	
	/**
	 * 功能描述:
	 *          通过一个整型数组组装到一个Deque集合中,本方法仅适合jdk1.6+版本的
	 * @param a 一个整型数组
	 * @return  返回值:返回组装之后的集合列表
	 */
	private static Deque<Integer> initDeque(int[] a){
		Deque<Integer> deque = new ArrayDeque<Integer>();
		for(Integer ds : a){
			deque.add(ds);
		}
		return deque;
	}
	
	
	/**
	 * 功能描述:
	 *          通过一个整型数组组装到一个List集合中,该方法适合jdk1.5+
	 * @param a 一个整型数组
	 * @return  返回值:返回组装之后的集合列表
	 */
	private static List<Integer> initList(int[] a){
		//LinkedList在检索时速度要比ArrayList快,只是在装载时需要消耗更大的内存
		//如果内存允许,换取时间的话可以考虑使用LinkedList,但是如果为了内存的话那么
		//就使用ArrayList
		List<Integer> list = new LinkedList<Integer>();
//		List<Integer> list = new ArrayList<Integer>();
		for(Integer ds : a){
			list.add(ds);
		}
		return list;
	}
	
	
	/**
	 * 功能描述:
	 *         构建一个无序并且可以重复的整型数组
	 * @param length    数组的长度
	 * @param maxValue  数组中元素的最大值
	 * @return  返回值:返回一个整型数组
	 */
	public static int[] buildArray(int length , int maxValue){
		int[] a = new int[length];
		for(int i = 0 ; i < length ; i++){
			Random r = new Random();
			a[i] = r.nextInt(maxValue);
		}
		return a;
	}
	
	
	/**
	 * 功能描述:
	 *         有一种积分机制,首先是不同的等级送了一个总积分,然后每消费三个积分
	 *         时又可以赠送一个积分,请设计一个方法计算出每个等级可以享受的总积分
	 * @param sum  第一次赠送的总积分
	 * @return  返回值:返回某积分下最终可以享受的总积分数
	 */
	public static int getTotalCounts(int sum){
		int count = 0;
		while(sum > 0){
			sum-- ;
			count++;
			if(count % 3 == 0){
				sum += 1;
			}
		}
		return count;
	}
	
	
	/**
	 * 功能描述:
	 *         采用进位方式求大整数(n)的阶乘
	 * @param n 阶乘参数
	 */
	public static void bigNumFactorial(int n) throws Exception
	{
		 long[] arr = new long[1000000];   //通过arr数组装阶乘结果
		    int high ,j ;   //high控制进位 ,j控制循环
		    int digit = 1 ;  // 位数   
		    int temp , i ;   
		    arr[0] = 1 ;   
		    for(i = 2 ; i <= n ; i++){   
		        for(high = 0 , j = 1 ; j <= digit ; ++j){   // 循环计算  
		            temp=(int)(arr[j-1]*i + high);// 计算乘积   
		            arr[j-1] = temp % 10;    // 保存每一位   
		            high = temp / 10;     // 进位   
		        }   
		        while(high > 0){   
		            arr[++digit-1] = high % 10;// 保存高位   
		            high /= 10;   
		        }   
		    } 
		    File file = new File("D:/result.txt");
			FileOutputStream fouts = new FileOutputStream(file , true);
		    //循环输出结果
		    for(int k = digit ; k >= 1 ; --k){   
		    	//把结果输出到文件中,这里使用了追加模式,所以每次测试时先把文件删除再进行测试
		    	fouts.write(String.valueOf(arr[k-1]).getBytes());
		    	//以下是在控制台直接输出
//		        System.out.print(arr[k-1]);  
//		        if(k % 100 == 0){//每输出100位换行
//		        	System.out.println();
//		        }
		    }   
		    fouts.close();
	}
	
	
	
	/**
	 * 功能描述:
	 *          使用java.math.BigDecimal类进行计算大整数阶乘
	 * @param n 阶乘参数
	 */
	public static void bigDecimalFactorial(int n) throws Exception{
		BigDecimal result = new BigDecimal("1");   
        for(int i = 2 ; i <= n ; i++){   
        	result = result.multiply(new BigDecimal(String.valueOf(i)));   
        } 
//        System.out.println(result.toString());  
        //把结果保存到文件之中,这里每次会覆盖原文件
        saveResult("D:/result1.txt" , result.toString() , false);
	}
	
	
	/**
	 * 功能描述:
	 *         保存指定内容到文件中
	 * @param filePath   文件所在的路径
	 * @param content    文件内容
	 * @param isAppend   是否追加
	 * @throws Exception
	 */
	private static void saveResult(String filePath , String content , boolean isAppend) throws Exception{
		File file = new File(filePath);
		FileOutputStream fouts = new FileOutputStream(file , isAppend);
		fouts.write(content.getBytes());
		fouts.flush();
		fouts.close();
	}
	
}





package com.myclover.exam.test;

import com.myclover.exam.ExamArray;

public class TestExamArray {

	public static void main(String[] args) {

		int[] a = ExamArray.buildArray(500000, 10000);
		int[] b = ExamArray.buildArray(500000, 10000);
		
		long st = System.currentTimeMillis();
		long sf = Runtime.getRuntime().freeMemory();
//		System.out.println(ExamArray.isEqualArray(a, b));
		System.out.println(ExamArray.isEqualArrayUseArrays(a, b));
		long et = System.currentTimeMillis();
		long ef = Runtime.getRuntime().freeMemory();
		System.out.println("执行时间:" + (et - st) + "  消耗的内存:" + (sf - ef));
		
		String  str = "DAsfsdddcdsfdsfwSDSARECCXASerw";
		System.out.println(ExamArray.calStringCounts(str));
		System.out.println(ExamArray.getTotalCounts(100));
//		try {
//			ExamArray.bigNumFactorial(20);
//			ExamArray.bigDecimalFactorial(20);
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
	}

}

分享到:
评论

相关推荐

    超全的嵌入式工程师笔试面试题汇总.zip

    超全的嵌入式工程师笔试面试题汇总 单片机嵌入式应聘测试题(含答案).pdf 经典嵌入式面试题.pdf 嵌入式工程师笔试题带答案.pdf 嵌入式工程师经典面试题.pdf 嵌入式软件工程师笔试集锦.pdf 嵌入式软件工程师笔试题__...

    互联网校招题库资料笔试面试真题具体面试问题回答技巧腾讯阿里培训资料.zip

    C++笔试面试题带答案.docx c++笔试题汇总.pdf C++经典面试题库 附带参考答案.docx C++语言程序设计试题.docx CC++面试问题分类大汇总.docx C_C++笔试题大全.doc gamesloft C++面试题目.docx 常见C++笔试题目整理(含...

    笔试面试题的代码.zip

    笔试面试题的代码.zip笔试面试题的代码.zip笔试面试题的代码.zip笔试面试题的代码.zip笔试面试题的代码.zip笔试面试题的代码.zip笔试面试题的代码.zip笔试面试题的代码.zip笔试面试题的代码.zip笔试面试题的代码.zip...

    【笔试面试题】华为校园招聘笔试面试题合集

    【笔试面试题】华为校园招聘笔试面试题合集 说明:华为校园招聘合集,各个岗位的的笔试题,非常有用 (goodbookisgoodbook) 文件列表: 华为校园招聘笔试面试题合集(0,-03-13) 华为校园招聘笔试面试题合集\2012年最全的...

    JAVA笔试面试题详解.pdf

    JAVA笔试面试题详解.pdfJAVA笔试面试题详解.pdfJAVA笔试面试题详解.pdfJAVA笔试面试题详解.pdfJAVA笔试面试题详解.pdfJAVA笔试面试题详解.pdfJAVA笔试面试题详解.pdfJAVA笔试面试题详解.pdfJAVA笔试面试题详解.pdf...

    最全的Java笔试面试题.zip

    最全的Java笔试面试题.zip最全的Java笔试面试题.zip最全的Java笔试面试题.zip最全的Java笔试面试题.zip最全的Java笔试面试题.zip最全的Java笔试面试题.zip最全的Java笔试面试题.zip最全的Java笔试面试题.zip最全的...

    华为 近几年校园招聘笔试面试题

    华为 近几年校园招聘笔试 面试题 想进华为的看看吧

    C++面试题笔试题C++ 数据结构算法笔试题资料合集.zip

    C++笔试面试题带答案.docx c++笔试题汇总.pdf C++经典面试题库 附带参考答案.docx C++语言程序设计试题.docx CC++面试问题分类大汇总.docx C_C++笔试题大全.doc gamesloft C++面试题目.docx 常见C++笔试题目整理(含...

    100家IT名企笔试面试题

    100家IT名企笔试面试题 百度笔试题,中兴笔试题,腾讯笔试题,华为笔试题,联想笔试题

    BAT谷歌微软等各IT公司互联网C++ JAVA 计算机笔试面试真题复习资料108个文档合集.zip

    BAT谷歌微软等各IT公司互联网C++ JAVA 计算机笔试面试真题复习资料108个文档合集 C++基础面试题.docx C++开发工程师面试题库.docx C++技能测试试卷一及答案.docx C++技能测试试卷二及答案.docx c++笔试题汇总.pdf ...

    c#笔试面试题 c#笔试面试题

    下面,我们将深入探讨一些可能出现在C#笔试面试中的关键知识点。 一、基础语法 1. 变量与数据类型:理解C#中的基本数据类型(如int、string、bool等)以及引用类型,了解变量声明和初始化的规则。 2. 控制流:包括...

    硬件,嵌入式,fpga,半导体笔试面试题.zip

    硬件,嵌入式,fpga,半导体笔试面试题,包括FPGA工程师面试题和答案,中兴通讯校园招聘硬件类笔试题和答案,嵌入式硬件工程师招聘笔试题及答案,最全的硬件工程师笔试试题集,华为笔试真题,典型岗位笔试题,半导体...

    江苏鸿信笔试面试题

    江苏鸿信笔试面试题。附答案

    软件实施工程师笔试面试题及答案

    2017 年软件实施工程师笔试面试题及答案

    信息科技笔试面试题_笔试_农行_题库_

    各大银行信息科技岗面试笔试题库。建行、工商、农行、平安等银行信息科技岗位的笔试面试题目总结。

    c语言 面试题 与c语言有关的面试题 华为笔试题

    c语言 面试题 与c语言有关的面试题 华为笔试题 c语言 面试题 与c语言有关的面试题 华为笔试题 c语言 面试题 与c语言有关的面试题 华为笔试题 c语言 面试题 与c语言有关的面试题 华为笔试题 c语言 面试题 与c语言有关...

    互联网行业面试笔试真题资料BAT谷歌微软等笔试面试真题复习资料合集200MB.zip

    互联网行业面试笔试真题资料BAT谷歌微软等笔试面试真题复习资料合集200MB: 2015创新工场校招研发笔试题.pdf 2015小米校招技术类笔试题.pdf 360校园招聘2015届技术类笔试题.pdf 4399游戏2015校园招聘游戏开发类笔试题...

    最新各互联网BAT等笔试面试真题复习资料

    2. **产品设计与管理**:产品相关的面试题可能涵盖需求分析、用户研究、产品规划、竞品分析、项目管理等方面。 3. **互联网行业知识**:了解互联网行业的最新动态、发展趋势、商业模式等,可能涉及数据分析、云计算...

    web前端笔试题面试题汇总+前端优化总结

    web前端笔试题面试题汇总+前端优化总结 web前端笔试题面试题汇总+前端优化总结 web前端笔试题面试题汇总+前端优化总结 web前端笔试题面试题汇总+前端优化总结 web前端笔试题面试题汇总+前端优化总结 web前端笔试题...

Global site tag (gtag.js) - Google Analytics