java后端开发day13--面向对象综合练习
(以下内容全部来自上述课程)
注意:先有javabean,才能创建对象。
1.文字版格斗游戏
格斗游戏,每个游戏角色的姓名,血量,都不相同,在选定人物的时候(new对象的时候),这些信息就应该被确定下来。
简单版:
JavaBean类(无main):
import java.util.Random;public class Role {private String name;private int blood;public Role() {}public Role(String name, int blood) {this.name = name;this.blood = blood;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return blood*/public int getBlood() {return blood;}/*** 设置* @param blood*/public void setBlood(int blood) {this.blood = blood;}public String toString() {return "Role{name = " + name + ", blood = " + blood + "}";}//定义一个方法,用于攻击别人//思考:谁攻击谁?//Role r1 = new Role();//Role r2 = new Role();//r1.attack(r2);//方法的调用者去攻击参数public void attack(Role role){//计算造成的伤害1~20Random r = new Random();int hurt = r.nextInt(20)+1;//修改挨打的人的血量//挨揍的人的剩余血量 = 老的血量-新的伤害int remainBlood = role.getBlood() - hurt;//对剩余血量做一个判断,如果为负数,那么就修改为0remainBlood = remainBlood<0?0:remainBlood;//修改挨打的人的血量role.setBlood(remainBlood);//this表示方法的调用者System.out.println(this.getName()+"举起拳头,打了"+role.getName()+"一下,"+ "造成了"+hurt+"点伤害,"+ role.getName()+"还剩下了"+remainBlood+"点血");}
}
开始使用
public class GameTest {public static void main(String[] args) {//1.创建第一个角色Role r1 = new Role("乔峰",100);//2.创建第二个角色Role r2 = new Role("鸠摩智",100);//3.让两个角色进行格斗,回合制游戏while (true){//r1 用拳头打 r2r1.attack(r2);//判断r2的血量是否小于等于0if(r2.getBlood()<=0){System.out.println(r2.getName()+"已经挂了,"+r1.getName()+"赢了");break;}//r2 用拳头打 r1r2.attack(r1);//判断r1的血量是否小于等于0if(r1.getBlood()<=0){System.out.println(r1.getName()+"已经挂了,"+r2.getName()+"赢了");break;}}}
}
复杂版:
import java.util.Random;public class Role {private String name;private int blood;private char gender;private String face;String[] boyfaces = {"风流俊雅","气宇轩昂","相貌英俊","五官端正","相貌平平","一塌糊涂","面目狰狞"};String[] girlfaces = {"美奂绝伦","沉鱼落雁","婷婷玉立","身材娇好","相貌平平","相貌简陋","惨不忍睹"};String[] attacks_desc = {"%s使出了一招【背心钉】,转到对方身后,一掌向%s背心的灵台穴拍去。","%s使出了一招【游空探爪】,飞起身形自半空中变掌为抓锁向%s。","%s大喝一声,身形下伏,一招【劈雷坠地】,捶向%s双腿。","%s运气于掌,一瞬间掌心变得血红,一式【掌心雷】,推向%s。","%s阴手翻起阳手跟进,一招【没遮拦】,结结实实的捶向%s。","%s上步抢身,招中套招,一招【劈挂连环】,连环攻向%s。"};String[] injureds_desc = {"结果%s退了半步,毫发无损","结果给%s造成一处瘀伤","结果一击命中,%s痛得弯下腰","结果%s痛苦地闷哼了一声,显然受了点内伤","结果%s摇摇晃晃,一跤摔倒在地","结果%s脸色一下变得惨白,连退了好几步","结果%s一声惨叫,像滩软泥般塌了下去"};public Role() {}public Role(String name, int blood,char gender) {this.name = name;this.blood = blood;this.gender = gender;//随机长相setFace(gender);}public char getGender() {return gender;}public void setGender(char gender) {this.gender = gender;}public String getFace() {return face;}public void setFace(char gender) {//长相是随机的if(gender=='男'){//随机一个长相int index = new Random().nextInt(boyfaces.length);this.face = boyfaces[index];} else if(gender=='女'){//随机一个长相int index = new Random().nextInt(girlfaces.length);this.face = girlfaces[index];} else {face = "面目狰狞";}}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return blood*/public int getBlood() {return blood;}/*** 设置* @param blood*/public void setBlood(int blood) {this.blood = blood;}public String toString() {return "Role{name = " + name + ", blood = " + blood + "}";}//定义一个方法,用于攻击别人//思考:谁攻击谁?//Role r1 = new Role();//Role r2 = new Role();//r1.attack(r2);//方法的调用者去攻击参数public void attack(Role role){Random r = new Random();int index = r.nextInt(attacks_desc.length);String KungFu = attacks_desc[index];System.out.println("===============================");//输出攻击效果System.out.printf(KungFu,this.getName(),role.getName());//计算造成的伤害1~20int hurt = r.nextInt(20)+1;//修改挨打的人的血量//挨揍的人的剩余血量 = 老的血量-新的伤害int remainBlood = role.getBlood() - hurt;//对剩余血量做一个判断,如果为负数,那么就修改为0remainBlood = remainBlood<0?0:remainBlood;//修改挨打的人的血量role.setBlood(remainBlood);//受伤的描述:按照程度不同来判断if(remainBlood>90){System.out.printf(injureds_desc[0],role.getName());} else if(remainBlood>80 && remainBlood<=90){System.out.printf(injureds_desc[1],role.getName());} else if(remainBlood>70 && remainBlood<=80){System.out.printf(injureds_desc[2],role.getName());} else if(remainBlood>60 && remainBlood<=70){System.out.printf(injureds_desc[3],role.getName());} else if(remainBlood>40 && remainBlood<=60){System.out.printf(injureds_desc[4],role.getName());} else if(remainBlood>10 && remainBlood<=40){System.out.printf(injureds_desc[5],role.getName());} else if(remainBlood<=10){System.out.printf(injureds_desc[6],role.getName());}System.out.println();}public void showRoleInfo(){System.out.println("姓名:"+getName());System.out.println("血量:"+getBlood());System.out.println("性别:"+getGender());System.out.println("长相:"+getFace());}
}
public class GameTest {public static void main(String[] args) {//1.创建第一个角色Role r1 = new Role("乔峰",100,'男');//2.创建第二个角色Role r2 = new Role("鸠摩智",100,'男');//显示角色信息r1.showRoleInfo();r2.showRoleInfo();//3.让两个角色进行格斗,回合制游戏while (true){//r1 用拳头打 r2r1.attack(r2);//判断r2的血量是否小于等于0if(r2.getBlood()<=0){System.out.println(r2.getName()+"已经挂了,"+r1.getName()+"赢了");break;}//r2 用拳头打 r1r2.attack(r1);//判断r1的血量是否小于等于0if(r1.getBlood()<=0){System.out.println(r1.getName()+"已经挂了,"+r2.getName()+"赢了");break;}}}
}
2.两个对象数组练习
1.定义数组存储3个商品对象
商品的属性:商品的id,名字,价格,库存。
创建三个商品对象,并把商品对象存入到数组当中。
javabean:
package test2;public class Goods {private String id;private String name;private double price;private int count;public Goods() {}public Goods(String id, String name, double price, int count) {this.id = id;this.name = name;this.price = price;this.count = count;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}}
使用:
package test2;public class GoodsTest {public static void main(String[] args) {//1.创建一个数组Goods[] goods = new Goods[3];//2.创建三个商品对象Goods g1 = new Goods("001","倚天剑",1000,100);Goods g2 = new Goods("002","屠龙刀",10000,50);Goods g3 = new Goods("003","九阳神功",9999,10000);//3.把商品对象添加到数组中goods[0] = g1;goods[1] = g2;goods[2] = g3;//4.遍历数组for (int i = 0; i < goods.length; i++) {Goods g = goods[i];System.out.println(g.getId()+"\t"+g.getName()+"\t"+g.getPrice()+"\t"+g.getCount());}}}
2.键盘录入的两种不同体系:
package cars;import java.util.Scanner;public class test {public static void main(String[] args) {//键盘录入//第一套体系//nextInt; 接收整数//nextDouble(); 接收小数//next(); 接收字符串//遇到空格,制表符,回车就停止接受。这些符号后面的数据就不会接收了。//第二套体系//nextLine(); 接收字符串//可以接受空格,制表符,遇到回车才会停止。Scanner sc = new Scanner(System.in);System.out.println("请输入一个整数:"); //123 123int num1 = sc.nextInt();System.out.println(num1); //123System.out.println("请输入第二个整数");//不会显示,无需再次输入int num2 = sc.nextInt();System.out.println(num2); //123Scanner sc1 = new Scanner(System.in);System.out.println("请输入一个字符串"); //abc bcdString str1 = sc1.nextLine();System.out.println(str1); //abcSystem.out.println("请输入第二个字符串"); //不会显示,无需再次输入String str2 = sc1.nextLine();System.out.println(str2); //bcdScanner sc2 = new Scanner(System.in);System.out.println("请输入一个字符串"); //abc bcdString line1 = sc2.nextLine();System.out.println(line1); //abc bcdSystem.out.println("请输入第二个字符串"); //123 789String line2 = sc2.nextLine();System.out.println(line2); //123 789}
}
注意:
- 两套体系不能混用。
- 先用第一套体系。
- 等学习类型转换之后,再用第二套体系。
3.定义数组存储3部汽车对象。
汽车的属性:品牌,价格,颜色。
创建三个汽车对象,数据通过键盘录入而来,并把数据存入到数组当中。
javabean:
package cars;public class Cars {private String brand;private int prise;private String color;public Cars() {}public Cars(String brand, int prise, String color) {this.brand = brand;this.prise = prise;this.color = color;}/*** 获取* @return brand*/public String getBrand() {return brand;}/*** 设置* @param brand*/public void setBrand(String brand) {this.brand = brand;}/*** 获取* @return prise*/public int getPrise() {return prise;}/*** 设置* @param prise*/public void setPrise(int prise) {this.prise = prise;}/*** 获取* @return color*/public String getColor() {return color;}/*** 设置* @param color*/public void setColor(String color) {this.color = color;}public String toString() {return "Cars{brand = " + brand + ", prise = " + prise + ", color = " + color + "}";}
}
使用:
package cars;import cars.Cars;import java.util.Scanner;public class CarsTest {public static void main(String[] args) {//1.创建一个数组用来存3个汽车对象Cars[] cars = new Cars[3];//2.创建3个汽车对象,数据来自于键盘录入Scanner sc = new Scanner(System.in);for (int i = 0; i < cars.length; i++) {//创建汽车的对象//放在循环外就只有一个对象,后续录入都是在修改这个对象,// 所以需要放在循环里面Cars c = new Cars();//录入品牌System.out.println("请输入第" + (i + 1) + "辆车的品牌");String brand = sc.next();c.setBrand(brand);//录入价格System.out.println("请输入第" + (i + 1) + "辆车的价格");int prise = sc.nextInt();c.setPrise(prise);//录入颜色System.out.println("请输入第" + (i + 1) + "辆车的颜色");String color = sc.next();c.setColor(color);//把汽车对象存入数组中cars[i] = c;}//3.遍历数组,获取每一个汽车对象的品牌,价格,颜色for (int i = 0; i < cars.length; i++) {System.out.println("第" + (i + 1) + "辆车的品牌是:" + cars[i].getBrand());System.out.println("第" + (i + 1) + "辆车的价格是:" + cars[i].getPrise());System.out.println("第" + (i + 1) + "辆车的颜色是:" + cars[i].getColor());}}
}
4.定义数组存储3部手机对象
手机的属性:品牌,价格,颜色
要求:计算出三部手机的平均价格
JavaBean:
package Phone;public class Phone {private String brand;private int prise;private String color;public Phone() {}public Phone(String brand, int prise, String color) {this.brand = brand;this.prise = prise;this.color = color;}/*** 获取* @return brand*/public String getBrand() {return brand;}/*** 设置* @param brand*/public void setBrand(String brand) {this.brand = brand;}/*** 获取* @return prise*/public int getPrise() {return prise;}/*** 设置* @param prise*/public void setPrise(int prise) {this.prise = prise;}/*** 获取* @return color*/public String getColor() {return color;}/*** 设置* @param color*/public void setColor(String color) {this.color = color;}public String toString() {return "Phone{brand = " + brand + ", prise = " + prise + ", color = " + color + "}";}
}
使用:
package Phone;public class PhoneTest {public static void main(String[] args) {//1.创建一个数组用来存3个手机对象Phone[] phones = new Phone[3];//2.创建3个手机对象Phone p1 = new Phone("小米", 2999, "黑色");Phone p2 = new Phone("苹果", 8999, "玫瑰金");Phone p3 = new Phone("锤子", 3999, "棕色");//3.把手机对象添加到数组当中phones[0] = p1;phones[1] = p2;phones[2] = p3;//4.计算三部手机的平均价格int sum = 0;for (int i = 0; i < phones.length; i++) {sum += phones[i].getPrise();}//求平均值int avg = sum / phones.length;System.out.println(avg);}
}
5.定义数组存储4个女朋友的对象
女朋友的属性:姓名,年龄,性别,爱好
要求1:计算出四个女朋友的平均年龄
要求2:统计年龄比平均值小的女朋友有几个,并把她们的所有信息打印出来
javabean:
public class GrilFriend {private String name;private int age;private String gender;private String hobby;public GrilFriend() {}public GrilFriend(String name, int age, String gender, String hobby) {this.name = name;this.age = age;this.gender = gender;this.hobby = hobby;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}/*** 获取* @return gender*/public String getGender() {return gender;}/*** 设置* @param gender*/public void setGender(String gender) {this.gender = gender;}/*** 获取* @return hobby*/public String getHobby() {return hobby;}/*** 设置* @param hobby*/public void setHobby(String hobby) {this.hobby = hobby;}public String toString() {return "GrilFriend{name = " + name + ", age = " + age + ", gender = " + gender + ", hobby = " + hobby + "}";}
}
使用:
package girlfriend;public class GrilFriendTest {public static void main(String[] args) {//1.创建一个数组用来存4个女朋友对象GrilFriend[] gf = new GrilFriend[4];//2.创建4个女朋友对象GrilFriend gf1 = new GrilFriend("迪丽热巴", 18, "女", "旅游");GrilFriend gf2 = new GrilFriend("古力娜扎", 19, "女", "化妆");GrilFriend gf3 = new GrilFriend("马尔扎哈", 20, "男", "购物");GrilFriend gf4 = new GrilFriend("赵丽颖", 21, "女", "跳舞");//3.把女朋友对象添加到数组中gf[0] = gf1;gf[1] = gf2;gf[2] = gf3;gf[3] = gf4;//4.计算平均年龄int sum = 0;for (int i = 0; i < gf.length; i++) {GrilFriend g = gf[i];sum += g.getAge();}int avg = sum / gf.length;System.out.println("平均年龄是:" + avg);//5.找出低于平均年龄的女朋友,并统计个数int count = 0;for (int i = 0; i < gf.length; i++) {if (gf[i].getAge() < avg) {//6.输出低于平均年龄的女朋友的信息System.out.println(gf[i].getName() + " " + gf[i].getAge() +" " + gf[i].getGender() + " " + gf[i].getHobby());count++;System.out.println("低于平均年龄的女朋友有" + count + "个");}}}}
3.复杂对象数组练习
定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不同。
学生的属性:学号,姓名,年龄。
要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断。
要求2:添加完毕后,遍历所有学生信息。
要求3:通过id删除学生信息。
如果存在,则删除,如果不存在,则提示删除失败。
要求4:删除完毕之后,遍历所有学生信息。
要求5:查询数组id为“heima002”的学生,如果存在,则将他的年龄+1岁
javabean:
package Student;public class Student {private int id;private String name;private int age;public Student() {}public Student(int id, String name, int age) {this.id = id;this.name = name;this.age = age;}/*** 获取* @return id*/public int getId() {return id;}/*** 设置* @param id*/public void setId(int id) {this.id = id;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}public String toString() {return "add{id = " + id + ", name = " + name + ", age = " + age + "}";}
}
1.添加和遍历
使用:
package Student;public class StudentTest {public static void main(String[] args) {/*定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不同。学生的属性:学号,姓名,年龄。要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断。要求2:添加完毕后,遍历所有学生信息。要求3:通过id删除学生信息。如果存在,则删除,如果不存在,则提示删除失败。要求4:删除完毕之后,遍历所有学生信息。要求5:查询数组id为“heima002”的学生,如果存在,则将他的年龄+1岁*///1.创建一个数组用来存储学生对象Student[] arr = new Student[3];//2.创建学生对象Student s1 = new Student(1, "张三", 20);Student s2 = new Student(2, "李四", 21);Student s3 = new Student(3, "王五", 22);//3.把学生对象添加到数组中arr[0] = s1;arr[1] = s2;arr[2] = s3;//要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断。//读题拆题法//创建一个学生对象Student s4 = new Student(4, "赵六", 23);//学号的唯一性判断//已存在---不添加//不存在---添加boolean flag = contains(arr, s4.getId());if (flag) {System.out.println("学号已存在,添加失败");} else {//把s4添加到数组当中//1.数组已经存满---只能创建一个新的数组,新数组的长度 = 老数组的长度 + 1//2.数组没有存满---直接把s4添加到数组当中int count = getCount(arr);if (count == arr.length) {//已经存满//创建一个新的数组,长度 = 老数组 + 1//然后把老数组的元素,拷贝到新数组当中Student[] newArr = creatNewArr(arr);//[stu1,stu2,stu3]//[stu1,stu2,stu3,null]//把s4添加进去newArr[count] = s4;//要求2:添加完毕后,遍历所有学生信息。printArr(newArr);} else {//没有存满//[stu1,stu2,null]//getCount获取到的是2,表示数组中已经有了2个元素//还有一层意思:如果下一次要添加数据,就是添加到2的位置arr[count] = s4;//要求2:添加完毕后,遍历所有学生信息。printArr(arr);}}}//遍历数组(新老都遍历)public static void printArr(Student[] arr) {for (int i = 0; i < arr.length; i++) {Student stu = arr[i];if (stu != null) {System.out.println(stu.getId() + "," + stu.getName() + "," + stu.getAge());}}}//创建新数组,拷贝老数组public static Student[] creatNewArr(Student[] arr) {Student[] newArr = new Student[arr.length + 1];for (int i = 0; i < arr.length; i++) {newArr[i] = arr[i];}//把新数组返回return newArr;}//定义一个方法判断数组中已经存了几个元素public static int getCount(Student[] arr) {//定义一个计数器int count = 0;for (int i = 0; i < arr.length; i++) {if (arr[i] != null) {count++;}}return count;}//1.我要干嘛?---唯一性判断//2.我干这件事,需要什么才能完成?---数组,id//3.方法的调用处是否需要继续使用方法的结果?---需要public static boolean contains(Student[] arr, int id) {for (int i = 0; i < arr.length; i++) {Student stu = arr[i];if (stu != null) {if (arr[i].getId() == id) {return true;}}}//遍历完了数组,还没有找到,说明不存在return false;}
}
2.删除和修改
使用:
package Student;public class Test {public static void main(String[] args) {/*定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不同。学生的属性:学号,姓名,年龄。要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断。要求2:添加完毕后,遍历所有学生信息。要求3:通过id删除学生信息。如果存在,则删除,如果不存在,则提示删除失败。要求4:删除完毕之后,遍历所有学生信息。要求5:查询数组id为“2”的学生,如果存在,则将他的年龄+1岁*///1.创建一个数组用来存储学生对象Student[] arr = new Student[3];//2.创建学生对象Student s1 = new Student(1, "张三", 20);Student s2 = new Student(2, "李四", 21);Student s3 = new Student(3, "王五", 22);//3.把学生对象添加到数组中arr[0] = s1;arr[1] = s2;arr[2] = s3;//要求3:通过id删除学生信息。// 如果存在,则删除,如果不存在,则提示删除失败。//找到id在数组中对应的索引int index = getIndex(arr, 2);//判断index是否为-1if (index == -1) {System.out.println("id不存在,删除失败");} else {//删除//把index位置的元素赋值为nullarr[index] = null;//要求4:删除完毕之后,遍历所有学生信息。printArr(arr);}// 要求5:查询数组id为“2”的学生,如果存在,则将他的年龄+1岁//找到id为2的学生对象int index2 = getIndex(arr, 2);//判断index2是否为-1if (index2 == -1) {System.out.println("id不存在,年龄+1失败");} else {//把id为2的学生对象的年龄+1Student stu = arr[index2];int newAge = stu.getAge() + 1;//把+1的年龄设置回去stu.setAge(newAge);//要求2:添加完毕后,遍历所有学生信息。printArr(arr);}}//找到id在数组中对应的索引//1.我要干嘛? 我要找到id在数组中对应的索引//2.我干这件事,需要什么才能完成? 数组 id//3.方法的调用处是否需要继续使用方法的结果? 需要public static int getIndex(Student[] arr, int id) {int index = -1; //假设id在数组中不存在,值为-1for (int i = 0; i < arr.length; i++) {//获取数组中的每一个学生对象Student stu = arr[i];//对stu进行一个非空判断if (stu != null) {int sid = stu.getId();if (sid == id) {index = i;break;}}}//当循环结束之后如果还没找到就表示不存在return index;}//遍历数组(新老都遍历)public static void printArr(Student[] arr) {for (int i = 0; i < arr.length; i++) {Student stu = arr[i];if (stu != null) {System.out.println(stu.getId() + "," + stu.getName() + "," + stu.getAge());}}}
}
相关文章:
java后端开发day13--面向对象综合练习
(以下内容全部来自上述课程) 注意:先有javabean,才能创建对象。 1.文字版格斗游戏 格斗游戏,每个游戏角色的姓名,血量,都不相同,在选定人物的时候(new对象的时候&#…...
Vue解决父子组件传值,子组件改变值后父组件的值也改变的问题
vue开发过程中,父组件通过props传值给子组件,子组件在页面展示父组件的值,在操作子组件值以后,即使不点击确定按钮,父组件中的值也发生了变化,但是需求是操作子组件数据以后,必须点击"确定…...
【通俗解释,入门级】DeepSeek - R1 - Zero:强化学习提升LLM推理能力的奥秘
DeepSeek - R1 - Zero:强化学习提升LLM推理能力的奥秘 第一节:强化学习在DeepSeek - R1 - Zero中的基本概念与公式解释【通俗解释】 强化学习在DeepSeek - R1 - Zero里就像是一位“聪明的探险家”,在各种可能的推理路径中探索,通…...
《图解设计模式》笔记(六)访问数据结构
十三、Visitor 模式:访问数据结构并处理数据 Visitor:访问者 我们会“处理”在数据结构中保存着的元素,通常把“处理”代码放在表示数据结构的类中。 但每增加一种处理,就不得不去修改表示数据结构的类。 在 Visitor模式中&am…...
windows11上,使用pipx安装Poetry,Poetry的安装路径是什么?
当使用 pipx 安装 Poetry 时,pipx 会将 Poetry 安装到一个独立的虚拟环境中,并将其可执行文件链接到一个集中的目录中。以下是 pipx 安装 Poetry 时的路径信息: 1. Poetry 的安装路径 pipx 会为每个工具(如 Poetry)创…...
使用 vcpkg 简化 C++ 项目依赖管理
使用 vcpkg 简化 C 项目依赖管理 什么是 vcpkg? vcpkg 是微软推出的跨平台 C/C 包管理工具,支持 Windows/Linux/macOS。它可以帮助开发者: ✅ 一键安装 2000 开源库 ✅ 自动解决依赖关系 ✅ 生成 Visual Studio 集成配置 ✅ 支持自定义编译…...
怎样确定网站访问速度出现问题是后台还是服务器造成的?
网站的访问速度会影响到用户的体验感,当网络过于卡顿或访问速度较慢时,会给用户带来不好的体验感,但是网站访问速度不仅会是后台造成影响的,也可能是服务器的原因,那么我们该如何分辨呢? 当网站使用了数据库…...
【Elasticsearch】管道聚合
管道聚合就是在已有聚合结果之上在进行聚合,管道聚合是针对于聚合的聚合 在 Elasticsearch 中,管道聚合(Pipeline Aggregations)是一种特殊的聚合类型,用于对其他聚合的结果进行进一步的计算和处理,而不是直…...
CNN-GRU卷积神经网络门控循环单元多变量多步预测,光伏功率预测(Matlab完整源码和数据)
代码地址:CNN-GRU卷积神经网络门控循环单元多变量多步预测,光伏功率预测(Matlab完整源码和数据) CNN-GRU卷积神经网络门控循环单元多变量多步预测,光伏功率预测 一、引言 1.1、研究背景和意义 随着全球能源危机和环境问题的日…...
后端java工程师经验之谈,工作7年,mysql使用心得
mysql 工作7年,mysql使用心得 mysql1.创建变量2.创建存储过程2.1:WHILE循环2.2:repeat循环2.3:loop循环2.4:存储过程,游标2.5:存储过程,有输入参数和输出参数 3.三种注释写法4.case …...
综合评价 | 基于随机变异系数-TOPSIS组合法的综合评价模型(Matlab)
基于随机变异系数-TOPSIS组合法的综合评价模型 代码获取私信回复:综合评价 | 基于随机变异系数-TOPSIS组合法的综合评价模型(Matlab) 一、引言 1.1、研究背景与意义 在现代社会,随着信息量的不断增加和数据复杂性的提升&#…...
Visual Studio Code中文出现黄色框子的解决办法
Visual Studio Code中文出现黄色框子的解决办法 一、vsCode中文出现黄色框子-如图二、解决办法 一、vsCode中文出现黄色框子-如图 二、解决办法 点击 “文件”点击 “首选项”点击 “设置” 搜索框直接搜索unicode选择“文本编辑器”,往下滑动,找到“Un…...
手写一个C++ Android Binder服务及源码分析
手写一个C Android Binder服务及源码分析 前言一、 基于C语言编写Android Binder跨进程通信Demo总结及改进二、C语言编写自己的Binder服务Demo1. binder服务demo功能介绍2. binder服务demo代码结构图3. binder服务demo代码实现3.1 IHelloService.h代码实现3.2 BnHelloService.c…...
【AIGC】在VSCode中集成 DeepSeek(OPEN AI同理)
在 Visual Studio Code (VSCode) 中集成 AI 编程能力,可以通过安装和配置特定插件来实现。以下是如何通过 Continue 和 Cline 插件集成 DeepSeek: 一、集成 DeepSeek 获取 DeepSeek API 密钥:访问 DeepSeek 官方网站,注册并获取 …...
使用 Three.js 实现热力渐变效果
大家好!我是 [数擎 AI],一位热爱探索新技术的前端开发者,在这里分享前端和 Web3D、AI 技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步! 开发领域:前端开发 | A…...
Vue事件处理 - 绑定事件
Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue事件处理 - 绑定事件及事件处理 目录 事件处理 绑定方式 函数表达式 绑定函数名 输入框绑定事件 拿到输入框的值 传值加事件源 事件第三种写法 总结 事件处理 绑定方式 函数表达式 在按钮上使用函数表达式绑定事…...
DVWA靶场通关——SQL Injection篇
一,Low难度下unionget字符串select****注入 1,首先手工注入判断是否存在SQL注入漏洞,输入1 这是正常回显的结果,再键入1’ You have an error in your SQL syntax; check the manual that corresponds to your MySQL server ver…...
DeepSeek 助力 Vue 开发:打造丝滑的步骤条
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
今日学习总结
1.完成了P2242公路维修问题 2.完成了P10605下头论文 1.P2242 思考:建立单向链表,使用qsort降序排序。 #include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include<string.h> int n,m; int a[15005],b[15005],ans;…...
Transformer 的辉煌与大模型方向确立,点燃AGI之火把
GPT3,指明大模型发展方向,点燃大模型软件行业繁荣之火,目前大模型有100万个。 DeepSeek-V3,指明下一个阶段大模型发张方向,破壁: 资金壁垒:训练成本降低,适配丰富硬件,总…...
DeepSeek-Coder系列模型:智能编程助手的未来
文章目录 一、模型架构与核心功能1. 模型架构2. 核心功能 二、多语言支持与代码生成1. Python代码生成2. Java代码生成3. C代码生成4. JavaScript代码生成 三、仓库级代码理解1. 代码结构分析2. 上下文理解 四、FIM填充技术1. 函数自动填充2. 代码补全 五、应用场景1. 代码补全…...
微信小程序longpress以及touchend的bug,touchend不触发,touchend不执行
核心原因:bind:touchend里面不能放wx:if 举例: <view bind:longpress"longpressBtn" bind:touchend"touchendBtn"><view wx:if"{{isRecording}}" >松开发送</view><view wx:else"…...
多租户架构设计与实现:基于 PostgreSQL 和 Node.js
多租户架构设计与实现:基于 PostgreSQL 和 Node.js 引言 多租户架构(Multi-tenancy)是现代 SaaS(Software as a Service)应用的核心设计模式之一。它允许多个租户共享同一套应用实例,同时确保数据隔离和安全性。本文将详细介绍多租户架构的设计方案,并基于 PostgreSQL…...
四、OSG学习笔记-基础图元
前一章节: 三、OSG学习笔记-应用基础-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145514021 代码:CuiQingCheng/OsgStudy - Gitee.com 一、绘制盒子模型 下面一个简单的 demo #include<windows.h> #include<osg/Node&…...
windows平台本地部署DeepSeek大模型+Open WebUI网页界面(可以离线使用)
环境准备: 确定部署方案请参考:DeepSeek-R1系列(1.5b/7b/8b/32b/70b/761b)大模型部署需要什么硬件条件-CSDN博客 根据本人电脑配置:windows11 + i9-13900HX+RTX4060+DDR5 5600 32G内存 确定部署方案:DeepSeek-R1:7b + Ollama + Open WebUI 1. 安装 Ollama Ollama 是一…...
功能架构元模型
功能架构的元模型是对功能架构进行描述和建模的基础框架,它有助于统一不同团队对系统的理解,并为系统的设计和开发提供一致的标准和规范。虽然具体的元模型可能因不同的应用领域和特定需求而有所差异,但一般来说,功能架构的元模型可以涵盖以下几个方面: 组件/模块元模型:…...
云计算——AWS Solutions Architect – Associate(saa)4.安全组和NACL
安全组一充当虚拟防火墙对于关联实例,在实例级别控制入站和出站流量。 网络访问控制列表(NACL)一充当防火墙关联子网,在子网级别控制入站和出站流量。 在专有网络中,安全组和网络ACL(NACL)一起帮助构建分层网络防御。 安全组在实例级别操作…...
Fiddler Classic(HTTP流量代理+半汉化)
目录 一、关于Fiddler (一) Fiddler Classic (二) Fiddler Everywhere (三) Fiddler Everywhere Reporter (四) FiddlerCore (五) 总结 二、 软件安全性 1. 软件安装包 2. 软件汉化dll 三、安装与半汉化 1. 正常打开安装包点击下一步安装即可,安装路径自…...
【hive】记一次hiveserver内存溢出排查,线程池未正确关闭导致
一、使用 MemoryAnalyzer软件打开hprof文件 很大有30G,win内存24GB,不用担心可以打开,ma软件能够生成索引文件,逐块分析内存,如下图。 大约需要4小时。 overview中开不到具体信息。 二、使用Leak Suspects功能继续…...
MySQL的字段类型
MySQL 字段类型可以简单分为三大类 数值类型:整型(TINYINT、SMALLINT、MEDIUMINT、INT 和 BIGINT)、浮点型(FLOAT 和 DOUBLE)、定点型(DECIMAL)字符串类型:CHAR、VARCHAR、TINYTEXT…...
HTML之JavaScript运算符
HTML之JavaScript运算符 1.算术运算符 - * / %除以0,结果为Infinity取余数,如果除数为0,结果为NaN NAN:Not A Number2.复合赋值运算符 - * / %/ 除以0,结果为Infinity% 如果除数为0,结果为NaN NaN:No…...
UE5--浅析委托原理(Delegate)
委托概述 委托是一种用于事件处理的机制。通过使用委托,可以将一个或多个函数绑定到一个事件上,在事件触发时自动调用这些函数。代理也叫做委托,比如:跳,跑,开枪,伤害等响应,就是注册一个委托回调,其作用就是提供一种消息机制,都知道消息的传递需要发送方和接收方,…...
Android13-系统服务大管家-ServiceManager进程-启动篇
文章目录 关注 ServiceMager 原因ServerManager需要掌握的知识资料参考ServiceManager 进程启动启动脚本涉及到的相关源码文件源码跟踪ServiceManager脚本启动位置ServiceManager关联脚本 Native层源码分析main.cpp流程打开驱动 initWithDriverinitmakeProcessState 构造方法op…...
网络安全溯源 思路 网络安全原理
网络安全背景 网络就是实现不同主机之间的通讯。网络出现之初利用TCP/IP协议簇的相关协议概念,已经满足了互连两台主机之间可以进行通讯的目的,虽然看似简简单单几句话,就描述了网络概念与网络出现的目的,但是为了真正实现两台主机…...
Mac(m1)本地部署deepseek-R1模型
1. 下载安装ollama 直接下载软件,下载完成之后,安装即可,安装完成之后,命令行中可出现ollama命令 2. 在ollama官网查看需要下载的模型下载命令 1. 在官网查看deepseek对应的模型 2. 选择使用电脑配置的模型 3. copy 对应模型的安…...
从零复现DeepSeek R1:从V3中对MoE、MLA、MTP的实现,到Open R1对R1中SFT、GRPO的实现
前言 虽然我司从23年起,便逐步从教育为主转型到了科技为主,但不代表教育业务便没有了 随着DeepSeek特别是R1、其次V3模型的大火,我司七月在线的大模型线上营群里一学员朋友DIFY问道:校长好,deepseek 的课程目前有多少…...
[EAI-033] SFT 记忆,RL 泛化,LLM和VLM的消融研究
Paper Card 论文标题:SFT Memorizes, RL Generalizes: A Comparative Study of Foundation Model Post-training 论文作者:Tianzhe Chu, Yuexiang Zhai, Jihan Yang, Shengbang Tong, Saining Xie, Dale Schuurmans, Quoc V. Le, Sergey Levine, Yi Ma 论…...
示例代码:C# MQTTS双向认证(客户端)(服务器EMQX)
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
自制游戏——斗罗大陆
很简陋,没有图,请见谅 // mine[0] 级数 // mine[1] 战力 //mine[2] 1 白虎 //mine[2] 2 昊天锤 //mine[2] 3 蓝银草 #include <bits/stdc.h> using namespace std; int mine[100],live3, dou 1, luo 1, da 1, bag[1000], huan 0, lia…...
数据治理双证通关经验分享 | CDGA/CDGP备考全指南
历经1个月多的系统准备,本人于2024年顺利通过DAMA China的CDGA(数据治理工程师)和CDGP(数据治理专家)双认证。现将备考经验与资源体系化整理,助力从业者高效通关。 🌟 认证价值与政策背景 根据…...
Vue全流程--Vue3.0与Vue2.0响应式原理对比
Vue2中数据的响应式 需要使用Vue.set这么一个api,修改数据 需要使用Vue.delete这么一个api,删除数据 数据代理这个当面的理解可以看看我前面文章Vue全流程--数据代理的理解以及在Vue中的应用-CSDN博客 Vue3中数据的响应式 Vue3使用proxy这个api实现…...
Spring中都应用了哪些设计模式?
好的!以下是您提到的八种设计模式在 Spring 中的简单示例: 1. 简单工厂模式 简单工厂模式通过传入参数来决定实例化哪个类。Spring 中的 BeanFactory 就是简单工厂模式的应用。 示例代码: // 1. 创建接口和具体实现类 public interface A…...
fastjson2学习大纲
一、基础篇 - JSON与fastjson2核心概念 JSON基础 JSON语法规范(RFC 8259)JSON数据类型与Java类型对应关系序列化/反序列化核心概念 fastjson2入门 与fastjson1的主要区别核心优势: 性能提升(JSONB二进制协议)更完善的…...
k8s部署elasticsearch
前置环境:已部署k8s集群,ip地址为 192.168.10.1~192.168.10.5,总共5台机器。 1. 创建provisioner制备器(如果已存在,则不需要) 制备器的具体部署方式,参考我之前的文章:k8s部署rabbitmq-CSDN博客 2. 编写wms-elk-data-sc.yaml配置文件 apiVersion: storage.k8s.io/…...
BS架构(笔记整理)
楔子.基本概念 1.在网络架构中: 服务器通常是集中式计算资源,负责处理和存储数据;客户机是请求这些服务的终端设备,可能是个人电脑或移动设备;浏览器则是客户机上用来与服务器交互的工具,负责展示网页内容…...
从基础到人脸识别与目标检测
前言 从本文开始,我们将开始学习ROS机器视觉处理,刚开始先学习一部分外围的知识,为后续的人脸识别、目标跟踪和YOLOV5目标检测做准备工作。我采用的笔记本是联想拯救者游戏本,系统采用Ubuntu20.04,ROS采用noetic。 颜…...
ArcGIS Pro SDK (二十七)自定义许可
ArcGIS Pro SDK (二十七)自定义许可 环境:Visual Studio 2022 + .NET6 + ArcGIS Pro SDK 3.0 文章目录 ArcGIS Pro SDK (二十七)自定义许可1 在Config.xaml中添加扩展配置2 在Module1.cs中实现接口IExtensionConfig1 在Config.xaml中添加扩展配置 <modules><inse…...
一、kubernetes k8s
k8s概述: k8s的全称:kubernetes k8s k8s的版本:1.30 1.20------------用的最多的版本,1.18-1.21 1.24------------>k8s的镜像不再使用docker,containerd k8s的作用: 用于自动部署,自动扩展和管理“容器化应…...
C#、.Net 中级高级架构管理面试题杂烩
1、简述值类型和引用类型的区别 存储位置:值类型变量直接存储数据的值,通常存储在栈上;引用类型变量存储的是对象在堆上的引用地址。 内存管理:值类型的内存由系统自动管理,当超出作用域时自动释放;引用类…...
ArrayList和LinkedList有什么区别?在什么情况下使用ArrayList更高效?
ArrayList和LinkedList在Java中是两种常用的数据结构,分别基于数组和链表实现。它们在性能、内存使用和适用场景上各有特点。 ArrayList与LinkedList的主要区别 数据结构: ArrayList:基于动态数组实现,元素存储在连续的内存空间…...