java二道面试题

问题描述

2个问题1.有一个邮箱,有一千万条黑名单用户,怎么判断收件箱是不是黑名单用户。据说和字典什么的是属于同一个经典问题。。2.求一个字符串中最长的颠倒字符串。。比如 a123ghfuhg321asd131.(就是a123,321a.)

解决方案

1.有一个邮箱,有一千万条黑名单用户,怎么判断收件箱是不是黑名单用户。 据说和字典什么的是属于同一个经典问题。。 这个肯定是用布隆过滤算法,楼主可以网上去找找算法. 用map的瓶颈就是内存.优点:对比用MAP来存储,内存需要量急剧减少.检索速度超快.缺点:会有一定的误判,会把不是黑名单的判断成黑名单.但是不会漏判断.2.求一个字符串中最长的颠倒字符串。。 比如 a123ghfuhg321asd131.(就是a123,321a.)这个问题不是几句话能搞明白,楼主可以看看这个博客.里面有大量的算法分析.http://blog.csdn.net/v_july_vhttp://blog.csdn.net/v_july_v/article/details/7041827
解决方案二:
public class Test {/** * @param args */public static void main(String[] args) {String a = "jha123ghfs343uhg321asd131";String str1 = null, str2 = null, tmpstr1 = null, tmpstr2 = null, maxstr1 = null, maxstr2 = null;for (int i = 0; i < a.length() - 2; i++) {for (int j = 2 + i; j < a.length() - 1; j++) {if (j > i) {str1 = a.substring(i, j);if (str1 != null && !str1.equals("") && str1.length() > 1) {str2 = (new StringBuilder(str1)).reverse().toString();if (a.indexOf(str2) == -1) {if (tmpstr1 != null && (maxstr1 == null || tmpstr1.length() > maxstr1.length())) {maxstr1 = tmpstr1;maxstr2 = tmpstr2;}break;} else {tmpstr1 = str1;tmpstr2 = str2;}}}}}System.out.println("字符串中最长的颠倒字符串:"+maxstr1 + "," + maxstr2);}}运行输出,字符串中最长的颠倒字符串:a123gh,hg321a
解决方案三:
第二道题codepackage com.test1;/** * 最大长颠倒字符串 它的长度应该小于等于整个字符串(长度为L)的的一半 * 从假设最大颠倒长度为整个的1/2L 然后查这个长度的颠倒字符串是否存在 存在就返回,不存在,则继续往下找1/2L-1,以此类推1/2L-1....一直到0。如果为0说明没有 * */public class ResStrLong {public static void main(String[] args) {String string="a123ghfuhg321asd131"; String revString=getLongString(string);} public static String getLongString(String string) { int maxStr=string.length()/2; int len=string.length(); String revString=null; boolean flag=false; for(int i=maxStr;i>=0;i--){ for (int j = 0; j <len; j++) { if((j+i+1)>(len-1))continue;String subString=string.substring(j,j+i+1); revString=new StringBuffer(subString).reverse().toString();int flag1=string.indexOf(revString);if(flag1!=-1){flag=true;System.out.println(subString+":"+revString+";"+i);break;}} if(flag)break; } return revString; }}
解决方案四:
第一个问题,用hash,把字符串转为数字去比对,数据的存储和查找都会比较快。第二个问题,回文问题,上网找吧!
解决方案五:
第一个问题应该是考,怎么存这一千万条数据,使判断是不是黑名单用户的耗时最少。这也是分词器字典需要使用的数据结构。之前看IK分词的词典是使用树结构存储的;父节点使用hashmap存储子节点对象;每个节点的值是一个char。http://blog.csdn.net/guwenwu285/article/details/9617057第二个http://blog.csdn.net/hopeztm/article/details/7932245的思路二的方法:package snippet;public class Solution {private static int[] next;private static void GetNext(String s)// KMP求next数组{int i, j;i = 0;j = -1;next[0] = -1;while (i < s.length()) {if (j == -1 || s.charAt(i) == s.charAt(j)) {i++;j++;next[i] = j;} else {j = next[j];}}}private static int compare(String pattern, String s) // 用KMP算法做求出最长的前缀匹配{int i, j;i = 0;j = 0;int maxLen = 0;while (i < s.length()) {if (j == -1 || pattern.charAt(j) == s.charAt(i)) {i++;j++;} else {j = next[j];}if (j > maxLen) {maxLen = j;}if (j == pattern.length()) {return maxLen;}}return maxLen;}public static String longestPalindrome(String s) //{// Start typing your Java solution below// DO NOT write main() functionString reverString = new StringBuilder(s).reverse().toString(); // 求得到// 输入string// 的reversenext = new int[s.length() + 1];String maxPal = "";int maxLen = 0;int len;for (int i = 0; i < s.length(); i++) // 枚举所有后缀{String suffix = reverString.substring(i);if (suffix.length() < maxLen) {break;}GetNext(suffix);len = compare(suffix, s);if (len > maxLen) {maxPal = suffix.substring(0, len);maxLen = len;}}return maxPal;}public static void main(String[] args) {System.out.println(longestPalindrome("a123ghfuhg321asd131"));System.out.println(longestPalindrome("a123ghuhg321asd131"));}}

时间: 2024-07-31 05:31:46

java二道面试题的相关文章

java并发面试题(一)基础

本文整理了常见的Java并发面试题,希望对大家面试有所帮助,欢迎大家互相交流. 多线程 java中有几种方法可以实现一个线程? 如何停止一个正在运行的线程? notify()和notifyAll()有什么区别? sleep()和 wait()有什么区别? 什么是Daemon线程?它有什么意义? java如何实现多线程之间的通讯和协作? 锁 什么是可重入锁(ReentrantLock)? 当一个线程进入某个对象的一个synchronized的实例方法后,其它线程是否可进入此对象的其它方法? syn

java spring 面试题 找错

问题描述 java spring 面试题 找错 大神们帮忙,去了滴答拼车给的面试题,小弟我愣是没看懂,求解惑. 如下代码用spring管理,请说出代码是否有问题,如果有错请指出并修改. classTestDao(){ public void doUpdate(){ try{ update table1;//一个更新操作,无需关注语法 update table2;//一个更新操作,无需关注语法 insert history;//一个插入操作,无需关注语法 }catch(Exception e){

Java线程面试题 Top 50

不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员 的欢迎.大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发.调试.优化经验,所以线程相关的问题在面试中经常会 被提到. 在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用什么方式创建线程比较好(比如:继承thread类还是调用Runnable接口),然后逐渐问到并发问题像

权威发布15个顶级Java多线程面试题及回答

在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分.如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题.在投资银行业务中多线程和并发是一个非常受欢迎的话题,特别是电子交易发展方面相关的.他们会问面试者很多令人混淆的Java线程问题.面试官只是想确信面试者有足够的Java线程与并发方面的知识,因为候选人中有很多只浮于表面.用于直接面向市场交易的高容量和低延时的电子交易系统在本质上是并发的.下面这些是我在不同时间不同地点喜欢问的Java线程问题.我没有提供答

Java线程面试题 Top 50(转)

  不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎.大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发.调试.优化经验,所以线程相关的问题在面试中经常会被提到. 在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用什么方式创建线程比较好(比如:继承thread类还是调用Runnable接口),然后逐渐问到并发问题像

15个顶级Java多线程面试题及回答

原文链接  ,原文作者: Javin Paul ,  译者:赵峰 Java 线程面试问题 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分.如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题.在投资银行业务中多线程和并发是一个非常受欢迎的话题,特别是电子交易发展方面相关的.他们会问面试者很多令人混淆的Java线程问题.面试官只是想确信面试者有足够的Java线程与并发方面的知识,因为候选人中有很多只浮于表面.用于直接面向市场交易的高容量和低延时的电子交易

15个高级Java多线程面试题及回答_java

Java 线程面试问题 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分.如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题.在投资银行业务中多线程和并发是一个非常受欢迎的话题,特别是电子交易发展方面相关的.他们会问面试者很多令人混淆的Java线程问题.面试官只是想确信面试者有足够的Java线程与并发方面的知识,因为候选人中有很多只浮于表面.用于直接面向市场交易的高容量和低延时的电子交易系统在本质上是并发的.下面这些是我在不同时间不同地点喜欢问的Jav

Java笔试面试题合集

Java笔试面试题合集                          >&&< <><> &&& &&&&&&&&&&&&&        << <<                               <<<   <>           <>   

Java常见面试题(含答案)

第一,谈谈final, finally, finalize的区别. final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为 abstract的,又被声明为final的.将变量或方法声明为final,可以保证它们在使用中不被改变.被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改.被声明为final的方法也同样只能使用,不能重载 finally?再异常处理时提供 finally 块来执行任何