个人阿里笔试题目【编写一个编译器,计算代码在内存所需要的字节数】

简介: 个人阿里笔试题目【编写一个编译器,计算代码在内存所需要的字节数】

2021-08-16 笔试情况


题目:编写一个编译器,结算内存所需要的字节数  
请输入一个字符串,编译出代码所需要的字节数,如:int a[10][10][10],k,m; 
int 类型所占4个字节
long 类型所占8个字节
char 类型所占1个字节
输入描述:
int a[10][10][10],k,m;  
输出描述:
输入格式为 变量类型+一个空格+变量;
输出结果:
4008
(10 x 10 x 10 + 1 + 1) x 4 = 4008


个人写的很丑很臭代码:

package kaoshi;
import java.util.Arrays;
import java.util.Scanner;
/**
 * @author 王一宁
 * @date 2021/8/16 18:34
 * 【供阿里笔试 考试使用】
 */
public class KaoShi {
    public static void main(String[] args) {
        int res = 0; //定义字节数
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        String substring = s.substring(0, s.length() - 1);
        String[] chars1 = substring.split(" ");
        // 切割chars1
        String[] splitchars1 = chars1[1].split(",");
        String stringnum = "";
        int num = 0; // 数组乘几次
        int baseNum = 0;// 求次方的底数
        if (chars1[1].contains("[")){
            for (int i = 0; i < splitchars1.length; i++) {
                if (splitchars1[i].contains("[")){
                    stringnum = splitchars1[i];
                }
            }
            int i1 = stringnum.indexOf("[");
            System.out.println("第一次出现 [ 的下标: "+i1);
            int i2 = stringnum.indexOf("]");
            System.out.println("第一次出现 ] 的下标: "+i2);
            String substringnum = stringnum.substring(i1 + 1, i2);
            baseNum = Integer.parseInt(substringnum);
            System.out.println("i3的数值为: "+baseNum);
            if (chars1[0].equals("int")) {
                for (int i = 0; i < stringnum.length(); i++) {
                    char c = stringnum.charAt(i);
                    if (c == '['){
                        num = num + 1;
                    }
                }
                System.out.println("数值部分需要进行几次乘积:"+num);
                baseNum = (int) Math.pow(baseNum,num);
                res = (baseNum + splitchars1.length-1)*4;
                System.out.println("最终字节大小为: "+ res);
            }else if(chars1[0].equals("long")){
                for (int i = 0; i < stringnum.length(); i++) {
                    char c = stringnum.charAt(i);
                    if (c == '['){
                        num = num + 1;
                    }
                }
                System.out.println("数值部分需要进行几次乘积:"+num);
                baseNum = (int) Math.pow(baseNum,num);
                res = (baseNum + splitchars1.length-1)*8;
                System.out.println("最终字节大小为: "+ res);
            }else {
                for (int i = 0; i < stringnum.length(); i++) {
                    char c = stringnum.charAt(i);
                    if (c == '['){
                        num = num + 1;
                    }
                }
                System.out.println("数值部分需要进行几次乘积:"+num);
                baseNum = (int) Math.pow(baseNum,num);
                res = baseNum + splitchars1.length-1;
                System.out.println("最终字节大小为: "+ res);
            }
        }else{
            if (chars1[0].equals("int")){
                res = splitchars1.length * 4;
                System.out.println(res);
            }else if (chars1[0].equals("long")){
                res = splitchars1.length * 8;
                System.out.println(res);
            }else if (chars1[0].equals("char")){
                res = splitchars1.length;
                System.out.println(res);
            }
        }
    }
}

输出结果测试:

0474c50a229543148529cfe13d45afcc.png

db999367eb484afaaecc2ec2e44ef385.png

0fcfbfda87834913851640253e2be9cf.png

目录
相关文章
|
4月前
|
存储 安全 数据库
阿里云服务器计算型、通用型、内存型主要实例规格性能特点和适用场景汇总
阿里云服务器ECS计算型、通用型、内存型规格族属于独享型云服务器,在高负载不会出现计算资源争夺现象,因为每一个vCPU都对应一个Intel ® Xeon ®处理器核心的超线程,具有性能稳定且资源独享的特点。本文为大家整理汇总了阿里云服务器ECS计算型、通用型、内存型主要实例规格族具体实例规格有哪些,各个实例规格的性能特点和主要适用场景。
阿里云服务器计算型、通用型、内存型主要实例规格性能特点和适用场景汇总
|
28天前
|
存储 JavaScript 前端开发
如何优化代码以避免闭包引起的内存泄露
本文介绍了闭包引起内存泄露的原因,并提供了几种优化代码的策略,帮助开发者有效避免内存泄露问题,提升应用性能。
|
2月前
|
缓存 监控 NoSQL
阿里面试让聊一聊Redis 的内存淘汰(驱逐)策略
大家好,我是 V 哥。粉丝小 A 面试阿里时被问到 Redis 的内存淘汰策略问题,特此整理了一份详细笔记供参考。Redis 的内存淘汰策略决定了在内存达到上限时如何移除数据。希望这份笔记对你有所帮助!欢迎关注“威哥爱编程”,一起学习与成长。
|
1月前
|
存储 Kubernetes 架构师
阿里面试:JVM 锁内存 是怎么变化的? JVM 锁的膨胀过程 ?
尼恩,一位经验丰富的40岁老架构师,通过其读者交流群分享了一系列关于JVM锁的深度解析,包括偏向锁、轻量级锁、自旋锁和重量级锁的概念、内存结构变化及锁膨胀流程。这些内容不仅帮助群内的小伙伴们顺利通过了多家一线互联网企业的面试,还整理成了《尼恩Java面试宝典》等技术资料,助力更多开发者提升技术水平,实现职业逆袭。尼恩强调,掌握这些核心知识点不仅能提高面试成功率,还能在实际工作中更好地应对高并发场景下的性能优化问题。
|
3月前
|
存储 缓存 JSON
一行代码,我优化掉了1G内存占用
这里一行代码,指的是:String.intern()的调用,为了调用这一行代码,也写了几十行额外的代码。
|
3月前
|
缓存 Java
Java内存管理秘籍:掌握强软弱幻四大引用,让代码效率翻倍!
【8月更文挑战第29天】在Java中,引用是连接对象与内存的桥梁,主要分为强引用、软引用、弱引用和幻象引用。强引用确保对象生命周期由引用控制,适用于普通对象;软引用在内存不足时可被回收,适合用于内存敏感的缓存;弱引用在无强引用时即可被回收,适用于弱关联如监听器列表;幻象引用需与引用队列配合使用,用于跟踪对象回收状态,适用于执行清理工作。合理使用不同类型的引用车可以提升程序性能和资源管理效率。
46 4
|
3月前
|
前端开发 JavaScript Java
揭开 JavaScript 垃圾回收的秘密——一场与内存泄漏的生死较量,让你的代码从此焕然一新!
【8月更文挑战第23天】本文通过多个实例深入探讨了JavaScript中的垃圾回收机制及其对应用性能的影响。首先介绍了基本的内存管理方式,随后分析了变量不再使用时的回收过程。接着,通过事件监听器未被移除及全局变量管理不当等场景展示了常见的内存泄漏问题。最后,文章介绍了使用`WeakRef`和`FinalizationRegistry`等现代API来有效避免内存泄漏的方法。理解并运用这些技术能显著提升Web应用的稳定性和效率。
92 0
|
4月前
|
存储 缓存 安全
阿里云服务器实例规格选择参考:经济型、通用算力型、计算型、通用型、内存型区别
当我们在通过阿里云的各种活动选择云服务器实例规格的时候会发现,相同配置的云服务器往往有多个不同的实例可选,而且价格差别也比较大,这会是因为不同实例规格的由于采用的处理器不同,底层架构也有所不同(例如X86 计算架构与Arm 计算架构),因此不同实例的云服务器其性能与适用场景是有所不同。目前阿里云的活动中,主要的实例规格可分为经济型、通用算力型、计算型、通用型、内存型,对于很多初次接触阿里云服务器的用户来说,了解他们之间的差别就是比较重要的了,下面小编来为大家简单介绍下它们之间的区别。
阿里云服务器实例规格选择参考:经济型、通用算力型、计算型、通用型、内存型区别
|
5月前
|
弹性计算 安全 前端开发
云服务器ECS通用型、计算型和内存型区别以及详细介绍
阿里云ECS实例有计算型(c)、通用型(g)和内存型(r)系列,区别在于CPU内存比。计算型1:2,如2核4G;通用型1:4,如2核8G;内存型1:8,如2核16G。实例有第五代至第八代,如c7、g5、r8a等,新一代通常使用更先进的处理器。性能参数如CPU主频、IOPS和网络带宽随实例规格变化。实例适合场景包括高网络包收发、数据库、计算密集型任务等。
|
4月前
|
存储 Rust JavaScript
Rust 问题之TypeScript 代码,变量 s 存储在栈内存中还是堆内存中如何解决
Rust 问题之TypeScript 代码,变量 s 存储在栈内存中还是堆内存中如何解决