最后希望可以帮助到大家!
千千万万要记得:多刷题!!多刷题!!
之前算法是我的硬伤,后面硬啃了好长一段时间才补回来,算法才是程序员的灵魂!!!!
篇幅有限,以下只能截图分享部分的资源!!
(1)多线程(这里以多线程为代表,其实整理了一本JAVA核心架构笔记集)
(2)刷的算法题(还有左神的算法笔记)
(3)面经+真题解析+对应的相关笔记(很全面)
(4)视频学习(部分)
ps:当你觉得学不进或者累了的时候,视频是个不错的选择
在这里,最后只一句话:祝大家offer拿到手软!!
@Test
public void getDeclaredConstructors(){
// a.反射第一步先得到Class类对象
Class c = Student.class ;
// b.getDeclaredConstructors(): 定位全部构造器,只要申明了就可以拿到
Constructor[] cons = c.getDeclaredConstructors();
// c.遍历这些构造器
for (Constructor con : cons) {
System.out.println(con.getName()+“===>”+con.getParameterCount());
}
}
// 2.getDeclaredConstructor
// 获取某个构造器: 只要你敢写,这里就能拿到,无所谓权限是否可及。
@Test
public void getDeclaredConstructor() throws Exception {
// a.反射第一步先得到Class类对象
Class c = Student.class ;
// b.getDeclaredConstructor():定位某个构造器,根据参数匹配,只要申明了就可以获取
Constructor con = c.getDeclaredConstructor(); // 可以拿到!定位无参数构造器!
//Constructor con = c.getDeclaredConstructor(String.class , int.class); // 有参数的!!
// c.构造器名称和参数
System.out.println(con.getName()+“===>”+con.getParameterCount());
}
}
反射获取Constructor构造器然后通过这个构造器初始化对象
Constructor的API:
-
T newInstance(Object... initargs)
: 创建对象,注入构造器需要的数据 -
void setAccessible(true)
: 修改访问权限,true代表暴力攻破权限,false表示保留
public class Student {
private String name ;
private int age ;
private Student(){
System.out.println(“无参数构造器被执行~~~~”);
}
public Student(String name, int age) {
System.out.println(“有参数构造器被执行~~~~”);
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return “Student{” +
“name='” + name + ‘’’ +
“, age=” + age +
‘}’;
}
}
public class TestStudent02 {
// 1.调用无参数构造器得到一个类的对象返回。
@Test
public void createObj01() throws Exception {
// a.反射第一步是先得到Class类对象
Class c = Student.class ;
// b.定位无参数构造器对象
Constructor constructor = c.getDeclaredConstructor();
// c.暴力打开私有构造器的访问权限
constructor.setAccessible(true);
// d.通过无参数构造器初始化对象返回
Student swk = (Student) constructor.newInstance(); // 最终还是调用无参数构造器的!
System.out.println(swk);
}
// 2.调用有参数构造器得到一个类的对象返回。
@Test
public void createObj02() throws Exception {
// a.反射第一步是先得到Class类对象
Class c = Student.class ;
// b.定位有参数构造器对象
Constructor constructor = c.getDeclaredConstructor(String.class , int.class);
// c.通过无参数构造器初始化对象返回
Student swk = (Student) constructor.newInstance(“孙悟空”,10000); // 最终还是调用有参数构造器的!
System.out.println(swk);
}
}
-
可以通过定位类的构造器对象
-
如果构造器对象没有访问权限可以通过:
void setAccessible(true)
打开权限 -
构造器可以通过
T newInstance(Object... initargs)
调用自己,传入参数
-
Field getDeclaredField(String name)
: 根据成员变量名获取对应Field对象 -
Field[] getDeclaredFields()
: 获得所有的成员变量对应的Field对象
public class FieldDemo {
/**
- 1.获取全部的成员变量。
*/
@Test
public void getDeclaredFields(){
// a.先获取class类对象
Class c = Dog.class;
// b.获取全部申明的成员变量对象
Field[] fields = c.getDeclaredFields();
for (Field field : fields) {
System.out.println(field.getName()+“===>”+field.getType());
}
}
/**
2.获取某个成员变量对象
*/
@Test
public void getDeclaredField() throws Exception {
// a.先获取class类对象
Class c = Dog.class;
// b.定位某个成员变量对象 :根据名称定位!!
Field ageF = c.getDeclaredField(“age”);
System.out.println(ageF.getName()+“—>”+ageF.getType());
}
}
Field的方法:给成员变量赋值和取值
-
void set(Object obj,Object value)
: 给对象注入某个成员变量数据 -
Object get(Object obj)
: 获取对象的成员变量的值 -
void setAccessible(true)
: 暴力反射,设置为可以直接访问私有类型的属性 -
Class getType()
: 获取属性的类型,返回Class对象 -
String getName()
: 获取属性的名称
public class Dog {
private String name;
private int age ;
private String color ;
public static String school;
public static final String SCHOOL_1 = “宠物学校”;
public Dog() {
}
public Dog(String name, int age, String color) {
this.name = name;
this.age = age;
this.color = color;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return “Dog{” +
“name='” + name + ‘’’ +
“, age=” + age +
“, color='” + color + ‘’’ +
‘}’;
}
}
public class FieldDemo02 {
@Test
public void setField() throws Exception {
// a.反射的第一步获取Class类对象
Class c = Dog.class ;
// b.定位name成员变量
Field nameF = c.getDeclaredField(“name”);
// c.为这个成员变量赋值!
Dog taiDi = new Dog();
nameF.setAccessible(true); // 暴力反射!
/**
-
参数一:被赋值的对象。
-
参数二:该成员变量的值。
*/
nameF.set(taiDi , “勇敢的泰迪”);
System.out.println(taiDi);
// d.获取成员变量的值
String value = nameF.get(taiDi)+“”;
System.out.println(value);
}
}
反射获取类的Method方法对象:
Method getDeclaredMethod(String name,Class...args)
- 根据方法名和参数类型获取对应的方法对象
Method[] getDeclaredMethods()
- 获得类中所有成员方法对象,返回数组
Method的方法执行:
-
Object invoke(Object obj,Object... args)
-
参数一:触发的是哪个对象的方法执行
-
参数二:args:调用方法时传递的实际参数
public class Dog {
private String name ;
public Dog(){
}
public Dog(String name) {
this.name = name;
}
public void run(){
System.out.println(“狗跑的贼快~~”);
}
private void eat(){
System.out.println(“狗吃骨头”);
}
private void eat(String name){
System.out.println(“狗吃”+name);
}
public static void inAddr(){
System.out.println(“在吉山区有一只单身狗!”);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class MethodDemo01 {
/**
- 1.获得类中的所有成员方法对象
*/
@Test
public void getDeclaredMethods(){
// a.先获取class类对象
Class c = Dog.class ;
// b.获取全部申明的方法!
Method[] methods = c.getDeclaredMethods();
// c.遍历这些方法
for (Method method : methods) {
System.out.println(method.getName()+“====>”
- method.getParameterCount()+“===>” + method.getReturnType());
}
}
/**
-
- 获取某个方法对象
*/
@Test
public void getDeclardMethod() throws Exception {
// a.先获取class类对象
Class c = Dog.class;
// b.定位它的某个方法
Method run = c.getDeclaredMethod(“run”);
// c.触发方法执行!
Dog jinMao = new Dog();
Object rs = run.invoke(jinMao); // 触发jinMao对象的run()方法执行!
System.out.println(rs);// 如果方法没有返回值,结果是null
/**
-
参数一:方法名称
-
参数二:方法的参数个数和类型(可变参数!)
*/
Method eat = c.getDeclaredMethod(“eat”,String.class);
结局:总结+分享
看完美团、字节、腾讯这三家的一二三面试问题,是不是感觉问的特别多,可能咱们真的又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。
开篇有提及我可是足足背下了Java互联网工程师面试1000题,多少还是有点用的呢,换汤不换药,不管面试官怎么问你,抓住本质即可!能读到此处的都是真爱
- Java互联网工程师面试1000题
而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的 《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题。
- 程序员代码面试指南–IT名企算法与数据结构题目最优解
- 其余像设计模式,建议可以看看下面这4份PDF(已经整理)
- 更多的Java面试学习笔记如下,关于面试这一块,我额外细分出Java基础-中级-高级开发的面试+解析,以及调优笔记等等等。。。
以上所提及的全部Java面试学习的PDF及笔记,如若皆是你所需要的,那么都可发送给你!
- Java互联网工程师面试1000题
[外链图片转存中…(img-OltH5wrp-1715081995575)]
而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的 《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题。
- 程序员代码面试指南–IT名企算法与数据结构题目最优解
[外链图片转存中…(img-NgIxIIy4-1715081995575)]
- 其余像设计模式,建议可以看看下面这4份PDF(已经整理)
[外链图片转存中…(img-ZKTsz7Nm-1715081995576)]
- 更多的Java面试学习笔记如下,关于面试这一块,我额外细分出Java基础-中级-高级开发的面试+解析,以及调优笔记等等等。。。
[外链图片转存中…(img-VPQ2xlt9-1715081995576)]
以上所提及的全部Java面试学习的PDF及笔记,如若皆是你所需要的,那么都可发送给你!