反射工具类,BAT等大厂必问技术面试题

	return list;

}



/**

 * 获取所有属性

 * 

 * @return 所有的属性【每一个属性添加到StringBuilder中,最后保存到一个List集合中】

 */

public static List<StringBuilder> getFields(Class<?> clazz) {

	Field[] fields = clazz.getDeclaredFields();

	int len = fields.length;



	List<StringBuilder> list = new ArrayList<StringBuilder>();

	StringBuilder sb = null;

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

		Field field = fields[i];

		sb = new StringBuilder();



		// 修饰符

		String modifier = Modifier.toString(field.getModifiers());

		sb.append(modifier + " ");



		// 数据类型

		Class<?> type = field.getType();

		String typeName = type.getSimpleName();

		sb.append(typeName + " ");



		// 属性名

		String fieldName = field.getName();

		sb.append(fieldName + ";");



		list.add(sb);

	}



	return list;

}



/**

 * 获取所有公共的属性

 * 

 * @return 所有公共的属性【每一个属性添加到StringBuilder中,最后保存到一个List集合中】

 */

public static List<StringBuilder> getPublicFields(Class<?> clazz) {

	Field[] fields = clazz.getFields();

	int len = fields.length;



	List<StringBuilder> list = new ArrayList<StringBuilder>();

	StringBuilder sb = null;

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

		Field field = fields[i];

		sb = new StringBuilder();



		// 修饰符

		String modifier = Modifier.toString(field.getModifiers());

		sb.append(modifier + " ");



		// 数据类型

		Class<?> type = field.getType();

		String typeName = type.getSimpleName();

		sb.append(typeName + " ");



		// 属性名

		String fieldName = field.getName();

		sb.append(fieldName + ";");



		list.add(sb);

	}



	return list;

}



/**

 * 获取所有构造方法

 * 

 * @return 所有的构造方法【每一个构造方法添加到StringBuilder中,最后保存到一个List集合中】

 */

public static List<StringBuilder> getConstructors(Class<?> clazz) {

	Constructor<?>[] constructors = clazz.getDeclaredConstructors();

	int len = constructors.length;



	List<StringBuilder> list = new ArrayList<StringBuilder>();

	StringBuilder sb = null;

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

		Constructor<?> constructor = constructors[i];

		sb = new StringBuilder();



		// 修饰符

		String modifier = Modifier.toString(constructor.getModifiers());

		sb.append(modifier + " ");



		// 方法名(类名)

		String constructorName = clazz.getSimpleName();

		sb.append(constructorName + " (");



		// 形参列表

		Class<?>[] parameterTypes = constructor.getParameterTypes();

		int length = parameterTypes.length;

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

			Class<?> parameterType = parameterTypes[j];



			String parameterTypeName = parameterType.getSimpleName();



			if (j < length - 1) {

				sb.append(parameterTypeName + ", ");

			} else {

				sb.append(parameterTypeName);

			}



		}



		sb.append(") {}");



		list.add(sb);

	}



	return list;

}



/**

 * 获取所有自身的方法

 * 

 * @return 所有自身的方法【每一个方法添加到StringBuilder中,最后保存到一个List集合中】

 */

public static List<StringBuilder> getMethods(Class<?> clazz) {

	Method[] methods = clazz.getDeclaredMethods();

	int len = methods.length;



	List<StringBuilder> list = new ArrayList<StringBuilder>();

	StringBuilder sb = null;

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

		Method method = methods[i];

		sb = new StringBuilder();



		// 修饰符

		String modifier = Modifier.toString(method.getModifiers());

		sb.append(modifier + " ");



		// 返回值类型

		Class<?> returnClass = method.getReturnType();

		String returnType = returnClass.getSimpleName();

		sb.append(returnType + " ");



		// 方法名

		String methodName = method.getName();

		sb.append(methodName + " (");



		// 形参列表

		Class<?>[] parameterTypes = method.getParameterTypes();

		int length = parameterTypes.length;



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

			Class<?> parameterType = parameterTypes[j];



			// 形参类型

			String parameterTypeName = parameterType.getSimpleName();



			if (j < length - 1) {

				sb.append(parameterTypeName + ", ");

			} else {

				sb.append(parameterTypeName);

			}



		}



		sb.append(") {}");



		list.add(sb);

	}



	return list;

}



/**

 * 获取所有公共的方法

 * 

 * @return 所有公共的方法【每一个方法添加到StringBuilder中,最后保存到一个List集合中】

 */

public static List<StringBuilder> getPublicMethods(Class<?> clazz) {

	Method[] methods = clazz.getMethods();

	int len = methods.length;



	List<StringBuilder> list = new ArrayList<StringBuilder>();

	StringBuilder sb = null;

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

		Method method = methods[i];

		sb = new StringBuilder();



		// 修饰符

		String modifier = Modifier.toString(method.getModifiers());

		sb.append(modifier + " ");



		// 返回值类型

		Class<?> returnClass = method.getReturnType();

		String returnType = returnClass.getSimpleName();

		sb.append(returnType + " ");



		// 方法名

		String methodName = method.getName();

		sb.append(methodName + " (");



		// 形参列表

		Class<?>[] parameterTypes = method.getParameterTypes();

		int length = parameterTypes.length;



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

			Class<?> parameterType = parameterTypes[j];



			// 形参类型

			String parameterTypeName = parameterType.getSimpleName();



			if (j < length - 1) {

				sb.append(parameterTypeName + ", ");

			} else {

				sb.append(parameterTypeName);

			}



		}



		sb.append(") {}");



		list.add(sb);

	}



	return list;

}



/**

 * 获取所有的注解名

 * 

 * @return 所有的注解名【每一个注解名的类型为String,最后保存到一个List集合中】

 */

public static List<String> getAnnotations(Class<?> clazz) {

	Annotation[] annotations = clazz.getAnnotations();

	int len = annotations.length;



	List<String> list = new ArrayList<String>();

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

		Annotation annotation = annotations[i];



		String annotationName = annotation.annotationType().getSimpleName();

		list.add(annotationName);

	}



	return list;

}



/**

 * 获取父类的泛型

 * 

 * @return 父类的泛型【Class类型】

 */

public static Class<?> getSuperClassGenericParameterizedType(Class<?> clazz) {

	Type genericSuperClass = clazz.getGenericSuperclass();



	Class<?> superClassGenericParameterizedType = null;



	// 判断父类是否有泛型

	if (genericSuperClass instanceof ParameterizedType) {

		// 向下转型,以便调用方法

		ParameterizedType pt = (ParameterizedType) genericSuperClass;

		// 只取第一个,因为一个类只能继承一个父类

		Type superClazz = pt.getActualTypeArguments()[0];

		// 转换为Class类型

		superClassGenericParameterizedType = (Class<?>) superClazz;

	}



	return superClassGenericParameterizedType;

}



/**

 * 获取接口的所有泛型

 * 

 * @return 所有的泛型接口【每一个泛型接口的类型为Class,最后保存到一个List集合中】

 */

public static List<Class<?>> getInterfaceGenericParameterizedTypes(Class<?> clazz) {

	Type[] genericInterfaces = clazz.getGenericInterfaces();

	int len = genericInterfaces.length;



	List<Class<?>> list = new ArrayList<Class<?>>();

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

		Type genericInterface = genericInterfaces[i];



		// 判断接口是否有泛型

		if (genericInterface instanceof ParameterizedType) {

			ParameterizedType pt = (ParameterizedType) genericInterface;



			// 得到所有的泛型【Type类型的数组】

			Type[] interfaceTypes = pt.getActualTypeArguments();



			int length = interfaceTypes.length;



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

				// 获取对应的泛型【Type类型】

				Type interfaceType = interfaceTypes[j];

				// 转换为Class类型

				Class<?> interfaceClass = (Class<?>) interfaceType;

				list.add(interfaceClass);

			}



		}



	}



	return list;

}



/**

 * 打印包名

 */

public static void printPackage(Class<?> clazz) {

	System.out.println(getPackage(clazz));

}



/**

 * 打印继承的父类的全类名

 */

public static void printSuperClassName(Class<?> clazz) {

	System.out.println(getSuperClassName(clazz));

}



/**

 * 打印全类名

 */

public static void printClassName(Class<?> clazz) {

	System.out.println(getClassName(clazz));

}



/**

 * 打印实现的接口

 */

public static void printInterfaces(Class<?> clazz) {

	List<String> list = getInterfaces(clazz);

	int size = list.size();

	if (0 < size) {

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

			System.out.println(list.get(i));

		}

	} else {

		System.out.println("没有实现接口!");

	}

}



/**

 * 打印所有属性

 */

public static void printFields(Class<?> clazz) {

	List<StringBuilder> list = getFields(clazz);

	int size = list.size();

	if (0 < size) {

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

			System.out.println(list.get(i));

		}

	} else {

		System.out.println("没有属性!");

	}

}



/**

 * 打印所有公共的属性

 */

public static void printPublicFields(Class<?> clazz) {

	List<StringBuilder> list = getPublicFields(clazz);

	int size = list.size();

	if (0 < size) {

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

			System.out.println(list.get(i));

		}

	} else {

		System.out.println("没有属性!");

	}

}



/**

 * 打印所有构造方法

 */

public static void printConstructors(Class<?> clazz) {

	List<StringBuilder> list = getConstructors(clazz);

	int size = list.size();

	if (0 < size) {

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

			System.out.println(list.get(i));

		}

	} else {

		System.out.println("没有构造方法!");

	}

}



/**

 * 打印所有方法

 */

public static void printMethods(Class<?> clazz) {

	List<StringBuilder> list = getMethods(clazz);

	int size = list.size();

	if (0 < size) {

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

			System.out.println(list.get(i));

		}

	} else {

		System.out.println("没有方法!");

	}

}



/**

 * 打印所有公共的方法

 */

public static void printPublicMethods(Class<?> clazz) {

	List<StringBuilder> list = getPublicMethods(clazz);

	int size = list.size();

	if (0 < size) {

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

			System.out.println(list.get(i));

		}

	} else {

		System.out.println("没有方法!");

	}

}



/**

 * 打印所有的注解

 */

public static void printAnnotations(Class<?> clazz) {

	List<String> list = getAnnotations(clazz);

	int size = list.size();

	if (0 < size) {

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

			System.out.println(list.get(i));

		}

	} else {

		System.out.println("没有注解!");

	}

}



/**

 * 打印父类的泛型名

 */

public static void printSuperClassGenericParameterizedType(Class<?> clazz) {

	Class<?> superClassGenericParameterizedType = getSuperClassGenericParameterizedType(clazz);

	if (null != superClassGenericParameterizedType) {

		System.out.println(superClassGenericParameterizedType.getSimpleName());

	} else {

		System.out.println("父类没有泛型!");

	}

}



/**

 * 打印接口的泛型

 */

public static void printInterfaceGenericParameterizedTypes(Class<?> clazz) {

	List<Class<?>> list = getInterfaceGenericParameterizedTypes(clazz);

	int size = list.size();

	if (0 < size) {

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

			System.out.println(list.get(i).getSimpleName());

		}

	} else {

		System.out.println("没有泛型接口!");

感受:

其实我投简历的时候,都不太敢投递阿里。因为在阿里一面前已经过了字节的三次面试,投阿里的简历一直没被捞,所以以为简历就挂了。

特别感谢一面的面试官捞了我,给了我机会,同时也认可我的努力和态度。对比我的面经和其他大佬的面经,自己真的是运气好。别人8成实力,我可能8成运气。所以对我而言,我要继续加倍努力,弥补自己技术上的不足,以及与科班大佬们基础上的差距。希望自己能继续保持学习的热情,继续努力走下去。

也祝愿各位同学,都能找到自己心动的offer。

分享我在这次面试前所做的准备(刷题复习资料以及一些大佬们的学习笔记和学习路线),都已经整理成了电子文档

CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】

tln(superClassGenericParameterizedType.getSimpleName());

	} else {

		System.out.println("父类没有泛型!");

	}

}



/**

 * 打印接口的泛型

 */

public static void printInterfaceGenericParameterizedTypes(Class<?> clazz) {

	List<Class<?>> list = getInterfaceGenericParameterizedTypes(clazz);

	int size = list.size();

	if (0 < size) {

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

			System.out.println(list.get(i).getSimpleName());

		}

	} else {

		System.out.println("没有泛型接口!");

感受:

其实我投简历的时候,都不太敢投递阿里。因为在阿里一面前已经过了字节的三次面试,投阿里的简历一直没被捞,所以以为简历就挂了。

特别感谢一面的面试官捞了我,给了我机会,同时也认可我的努力和态度。对比我的面经和其他大佬的面经,自己真的是运气好。别人8成实力,我可能8成运气。所以对我而言,我要继续加倍努力,弥补自己技术上的不足,以及与科班大佬们基础上的差距。希望自己能继续保持学习的热情,继续努力走下去。

也祝愿各位同学,都能找到自己心动的offer。

分享我在这次面试前所做的准备(刷题复习资料以及一些大佬们的学习笔记和学习路线),都已经整理成了电子文档

CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】

拿到字节跳动offer后,简历被阿里捞了起来,二面迎来了P9"盘问"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值