论坛首页 Java企业应用论坛

一个java面试题

浏览 13805 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-06-19  
kidding87 写道
不知道这个题目要考的什么。。。
没有内存,基本什么都干不了,猜测题目可能要的是下面的这个?
static void change(){
		String str = new String("a  a  b  c j iz c q cc  dd");
		try {
			Field f_value = str.getClass().getDeclaredField("value");
			Field f_count = str.getClass().getDeclaredField("count");
			f_value.setAccessible(true);
			f_count.setAccessible(true);
			int count = f_count.getInt(str);
			char[] chars =(char[])f_value.get(str);
			for(int i=0;i<chars.length;i++){
				while(chars[i]==' '){
					for(int j=i+1;j<chars.length;j++){
						chars[j-1]=chars[j];
					}
					count--;
				}
			}
			f_count.setInt(str, count);
			System.out.println(str);
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
	}


连内存都放不下的字符串,你确定 int  不会溢出?
0 请登录后投票
   发表时间:2012-06-19  
ray_linn 写道
kidding87 写道
不知道这个题目要考的什么。。。
没有内存,基本什么都干不了,猜测题目可能要的是下面的这个?
static void change(){
		String str = new String("a  a  b  c j iz c q cc  dd");
		try {
			Field f_value = str.getClass().getDeclaredField("value");
			Field f_count = str.getClass().getDeclaredField("count");
			f_value.setAccessible(true);
			f_count.setAccessible(true);
			int count = f_count.getInt(str);
			char[] chars =(char[])f_value.get(str);
			for(int i=0;i<chars.length;i++){
				while(chars[i]==' '){
					for(int j=i+1;j<chars.length;j++){
						chars[j-1]=chars[j];
					}
					count--;
				}
			}
			f_count.setInt(str, count);
			System.out.println(str);
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
	}


连内存都放不下的字符串,你确定 int  不会溢出?


题目估计你没有看清楚。。。它可是说的“基本”
虽然题目可能没有解,但至少要积极去应对,还不是丢一句 破题 吧
0 请登录后投票
   发表时间:2012-06-19  
楼主非常随意的敲打了几下键盘,抛出一个凭借并不深刻的记忆写出一个描述并不准确的题目。

大家这么认真干什么, 让这个帖沉了吧,别回了。
0 请登录后投票
   发表时间:2012-06-19  
ThinkingQuest 写道
楼主非常随意的敲打了几下键盘,抛出一个凭借并不深刻的记忆写出一个描述并不准确的题目。

大家这么认真干什么, 让这个帖沉了吧,别回了。


这位兄台,我看您才是非常随意的敲几下键盘吧?楼主的这个面试题是算法与数据结构里面,线性表中一个经典题的改版而已。还是多分析分析问题,少发牢骚吧
0 请登录后投票
   发表时间:2012-06-19   最后修改:2012-06-19
ray_linn 写道
cttnbcj 写道
ray_linn 写道
C 里因为可以使用MEM MOVE 出这个题目才有意义吧。Java 中,从头读到尾,非空就写到文件里好了,文件又不占内存。

打开文件难道不占内存吗?求波解


你不会用 Console 直接print出来,用管道获取。。连文件操作都免。

java XXXX.class > save.txt


这种题叫挫题。


哎。你连题目意思都没明白的,内存满了,说明这个字符串很长,说明不能分配内存了,何谈console.print ,你以为开个console不需要分配内存吗?console.print调用的是系统进程csrss(nt下)来显示,没内存了怎么分配?
0 请登录后投票
   发表时间:2012-06-19  
cttnbcj 写道
ray_linn 写道
cttnbcj 写道
ray_linn 写道
C 里因为可以使用MEM MOVE 出这个题目才有意义吧。Java 中,从头读到尾,非空就写到文件里好了,文件又不占内存。

打开文件难道不占内存吗?求波解


你不会用 Console 直接print出来,用管道获取。。连文件操作都免。

java XXXX.class > save.txt


这种题叫挫题。


哎。你连题目意思都没明白的,内存满了,说明这个字符串很长,说明不能分配内存了,何谈console.print ,你以为开个console不需要分配内存吗?console.print调用的是系统进程csrss(nt下)来显示,没内存了怎么分配?



内存没满,说的是基本。但就“基本”这两个字可以看出,是要在空间复杂度很小的算法来解决。上面我的回复有分析了
0 请登录后投票
   发表时间:2012-06-19   最后修改:2012-06-19
cttnbcj 写道
ray_linn 写道
cttnbcj 写道
ray_linn 写道
C 里因为可以使用MEM MOVE 出这个题目才有意义吧。Java 中,从头读到尾,非空就写到文件里好了,文件又不占内存。

打开文件难道不占内存吗?求波解


你不会用 Console 直接print出来,用管道获取。。连文件操作都免。

java XXXX.class > save.txt


这种题叫挫题。


哎。你连题目意思都没明白的,内存满了,说明这个字符串很长,说明不能分配内存了,何谈console.print ,你以为开个console不需要分配内存吗?console.print调用的是系统进程csrss(nt下)来显示,没内存了怎么分配?



Console是静态类吧....如果连Console都调用不出来那请问什么可以调用?玩屁.

Java 再怎么占内存,也影响不到CSRSS好不,大家在不同的进程空间里。
0 请登录后投票
   发表时间:2012-06-19  
一个char可是16字节的
用来存字母,它利用的空间很少
String 对象里面还有hash这个变量
这个变量也可以拿来做零时变量用着
方法还是有的
0 请登录后投票
   发表时间:2012-06-19  
ray_linn 写道
cttnbcj 写道
ray_linn 写道
cttnbcj 写道
ray_linn 写道
C 里因为可以使用MEM MOVE 出这个题目才有意义吧。Java 中,从头读到尾,非空就写到文件里好了,文件又不占内存。

打开文件难道不占内存吗?求波解


你不会用 Console 直接print出来,用管道获取。。连文件操作都免。

java XXXX.class > save.txt


这种题叫挫题。


哎。你连题目意思都没明白的,内存满了,说明这个字符串很长,说明不能分配内存了,何谈console.print ,你以为开个console不需要分配内存吗?console.print调用的是系统进程csrss(nt下)来显示,没内存了怎么分配?



Console是静态类吧....如果连Console都调用不出来那请问什么可以调用?玩屁。

静态针对的是jdk 假如分配了100M,调用静态类不需要jdk额外增加内存,但是jdk,只是封装了console,调用的黑黑的框,除非是jdk静态类是操作桌面屏幕直接在JDK中实现的,否则肯定要去操作系统层面,内存没了,你到系统层面调用,马上卡死。
0 请登录后投票
   发表时间:2012-06-19  
kidding87 写道
一个char可是16字节的
用来存字母,它利用的空间很少
String 对象里面还有hash这个变量
这个变量也可以拿来做零时变量用着
方法还是有的


char是两字节,兄台。。。而且java的String对象相当于一个char[]数组
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics