2024年Android 9(12),字节跳动面试笔试

写在最后

最后我想说:对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

相信它会给大家带来很多收获:

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

} catch (NoSuchMethodException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

return path;

}

判断外置sd卡是否挂载

/**

  • 判断外置sd卡是否挂载

*/

public static boolean isStorageMounted(Context mContext) {

boolean isMounted = false;

StorageManager mStorageManager = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE);

Class<?> storageVolumeClazz = null;

try {

storageVolumeClazz = Class.forName(“android.os.storage.StorageVolume”);

Method getVolumeList = mStorageManager.getClass().getMethod(“getVolumeList”);

Method getPath = storageVolumeClazz.getMethod(“getPath”);

Method isRemovable = storageVolumeClazz.getMethod(“isRemovable”);

Method getState = storageVolumeClazz.getMethod(“getState”);

Object result = getVolumeList.invoke(mStorageManager);

final int length = Array.getLength(result);

for (int i = 0; i < length; i++) {

Object storageVolumeElement = Array.get(result, i);

String path = (String) getPath.invoke(storageVolumeElement);

boolean removable = (Boolean) isRemovable.invoke(storageVolumeElement);

String state = (String) getState.invoke(storageVolumeElement);

if (removable && state.equals(Environment.MEDIA_MOUNTED)) {

isMounted =removable ;

break;

}

}

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

} catch (NoSuchMethodException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

return isMounted;

}

获取手机内部剩余存储空间

/**

  • 获取手机内部剩余存储空间

  • @return

*/

public static long getAvailableInternalMemorySize() {

File path = Environment.getDataDirectory();

StatFs stat = new StatFs(path.getPath());

long blockSize = stat.getBlockSize();

long availableBlocks = stat.getAvailableBlocks();

return availableBlocks * blockSize;

}

获取手机内部总的存储空间

/**

  • 获取手机内部总的存储空间

  • @return

*/

public static long getTotalInternalMemorySize() {

File path = Environment.getDataDirectory();

StatFs stat = new StatFs(path.getPath());

long blockSize = stat.getBlockSize();

long totalBlocks = stat.getBlockCount();

return totalBlocks * blockSize;

}

获取SDCARD剩余存储空间

/**

  • 获取SDCARD剩余存储空间

  • @return

*/

public static long getAvailableExternalMemorySize() {

if (externalMemoryAvailable()) {

// File path = Environment.getExternalStorageDirectory();

// StatFs stat = new StatFs(path.getPath());

StatFs stat = new StatFs(getStoragePath(context,true));//path.getPath()

long blockSize = stat.getBlockSize();

long availableBlocks = stat.getAvailableBlocks();

return availableBlocks * blockSize;

} else {

return ERROR;

}

}

获取SDCARD总的存储空间

/**

  • 获取SDCARD总的存储空间

  • @return

*/

public static long getTotalExternalMemorySize() {

if (externalMemoryAvailable()) {

// File path = Environment.getExternalStorageDirectory();

// StatFs stat = new StatFs(path.getPath());

StatFs stat = new StatFs(getStoragePath(context,true));//path.getPath()

long blockSize = stat.getBlockSize();

long totalBlocks = stat.getBlockCount();

return totalBlocks * blockSize;

} else {

return ERROR;

}

}

获取系统总内存

/**

  • 获取系统总内存

  • @param context 可传入应用程序上下文。

  • @return 总内存大单位为B。

*/

public static long getTotalMemorySize(Context context) {

String dir = “/proc/meminfo”;

try {

FileReader fr = new FileReader(dir);

BufferedReader br = new BufferedReader(fr, 2048);

String memoryLine = br.readLine();

String subMemoryLine = memoryLine.substring(memoryLine.indexOf(“MemTotal:”));

br.close();

return Integer.parseInt(subMemoryLine.replaceAll(“\D+”, “”)) * 1024l;

} catch (IOException e) {

e.printStackTrace();

}

return 0;

}

获取当前可用内存

/**

  • 获取当前可用内存,返回数据以字节为单位。

  • @param context 可传入应用程序上下文。

  • @return 当前可用内存单位为B。

*/

public static long getAvailableMemory(Context context) {

ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();

am.getMemoryInfo(memoryInfo);

return memoryInfo.availMem;

}

private static DecimalFormat fileIntegerFormat = new DecimalFormat(“#0”);

private static DecimalFormat fileDecimalFormat = new DecimalFormat(“#0.#”);

单位换算

/**

  • 单位换算

  • @param size 单位为B

  • @param isInteger 是否返回取整的单位

  • @return 转换后的单位

*/

public static String formatFileSize(long size, boolean isInteger) {

DecimalFormat df = isInteger ? fileIntegerFormat : fileDecimalFormat;

String fileSizeString = “0M”;

if (size < 1024 && size > 0) {

fileSizeString = df.format((double) size) + “B”;

} else if (size < 1024 * 1024) {

fileSizeString = df.format((double) size / 1024) + “K”;

} else if (size < 1024 * 1024 * 1024) {

fileSizeString = df.format((double) size / (1024 * 1024)) + “M”;

} else {

fileSizeString = df.format((double) size / (1024 * 1024 * 1024)) + “G”;

}

return fileSizeString;

}

}

SD卡热插拔监听

//初始化receiver

protected void onResume()

最后

针对于上面的问题,我总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

image

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。**

[外链图片转存中…(img-AvDwG4gq-1714757067074)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值