此笔记为阿里云天池机器学习训练营笔记,学习地址:https://tianchi.aliyun.com/s/1fc36a7e103eb9948c974f638e83a83b感谢教程及阿里云提供平台
一、学习知识点概要1.什么是逻辑回归逻辑回归(Logistic regression,简称LR)逻辑回归是一个分类模型,并且广泛应用于各个领域之中,其最为突出的两点就是其模型简单和模型的可解释性强。
逻辑回归模型的优劣势:优点:实现简单,易于理解和实现;计算代价不高,速度很快,存储资源低;缺点:容易欠拟合,分类精度可能不高
2.逻辑回归的应用场景逻辑回归模型广泛用于各个领域,包括机器学习,大多数医学领域和社会科学。
例如:疾病的分析和预测(糖料病、冠心病等)、市场的营销预测(预测客户购买产品或中止订购的倾向等)、贷款拖欠可能、推荐算法、医疗诊断等等,可见逻辑回归应用的领域还是颇为广泛的。
二、学习内容学习目标
了解 逻辑回归 的理论
掌握 逻辑回归 的 sklearn 函数调用使用并将其运用到鸢尾花数据集预测
常用函数以下为sklearn.linear_model.LgisticRegres ...
如何解决高并发场景下的消息丢失问题?该问题有可能会以这样的方式出现:高并发场景下如何保证消息只会被消费一次
又或者说多次消费的结果和只消费一次是相同的
为了保证能够只被消费一次,那么我们需要保证消费不会被丢失。首先服务器发送消息到达消费者的时候每一个环节都有可能出现消息丢失的情况
生产者出现消息丢失:
消息队列通常和生产者不在同一个服务器上,他们通过内网链接。如果出现网络波动则容易出现消息丢失。为了保证能够成功传输,需要在出现传输失败的时候能够进行重传,同时开启一个ACK确认机制。当消息队列成功接收到生产者的消息,需要同时回传一个ACK包给生产者标识已经成功接受,否则需要重新传输。
消息队列出现消息丢失的问题:
主要出现的原因是因为存在一个消息刷盘的过程,这里存在异步刷盘和同步刷盘的区别。如果开启了异步刷盘,那么接收到的消息会先存储到cache内存里面而没有存储进入磁盘。如果此时消息队列所在服务器出现重启(没有进行持久化),那么就会出现丢失。解决方案是使用同步刷盘机制。
消息队列到消费者之间出现消息丢失:
消费者没有消费完成提前将进度更新到消息队列
生产者发送多条重复的消息,消费者 ...
这里我们根据前面提到的这个抽象工厂进行代码编写
1. 定义抽象产品接口首先,我们定义手机和路由器的抽象接口。
123456789101112131415// 手机产品接口public interface IPhoneProduct { void start(); void shutdown(); void callup(); void sendSMS();}// 路由器产品接口public interface IRouterProduct { void start(); void shutdown(); void openWiFi(); void setting();}
2. 定义具体产品类接下来,我们实现这些接口,创建具体的产品类。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 ...
设计模式的6大基本原则
回答
“设计模式是软件开发中的一种经过验证的通用解决方案,旨在解决开发过程中常见的设计问题。它们提供了一套可复用的设计结构和方法,帮助开发者在设计系统时做出更好的决策。
设计模式的好处主要有:
提高代码复用性,使相同的解决方案可以应用于不同项目;
增强代码可维护性,通过清晰的结构和职责分离,简化了代码的维护;
提升系统的灵活性和可扩展性,使系统更容易适应变化和扩展;
促进团队协作,为团队提供了统一的语言和沟通基础。”
什么是设计模式设计模式是软件开发中一套被公认的、经过验证的最佳实践和解决方案,用于解决常见的设计问题。它们是面向对象编程中可复用的解决方案,在软件设计过程中,通过遵循设计模式,开发者可以创建更为结构化、可维护和扩展的软件。
设计模式可以被视为前人总结的“经验法则”,它们以一种可理解、可传达的方式来表达,并通过对模式的名称、意图、解决方案和应用场景的描述,帮助开发者更快、更好地解决设计难题。
设计模式的好处提高代码的复用性:设计模式提供了解决常见问题的通用方法,使得这些解决方案可以在多个项目中反复使用,减少了重复代码的出现。
增强代码的可维护性:通过使用设计模式,代码结 ...
刷题笔记
未读
适配器模式和装饰器模式都是结构型设计模式,它们的主要区别在于它们的目的和使用场景。虽然它们在某些情况下可能看起来相似,但它们解决的问题和应用方式是不同的。下面是它们的主要区别:
1. 目的不同
适配器模式:适配器模式的主要目的是解决接口不兼容的问题。它将一个类的接口转换为客户端希望的另一个接口,使得原本由于接口不兼容而不能一起工作的类能够协同工作。适配器模式通常用于将已有类的接口适配到新接口,以便与系统的其他部分一起工作。
装饰器模式:装饰器模式的主要目的是动态地扩展对象的功能。它通过将对象包装在一个装饰器对象中,增强或改变对象的行为,而无需修改对象的原始类。装饰器模式允许我们在运行时选择或组合多个装饰器,以灵活地为对象添加功能。
2. 结构和实现方式不同
适配器模式:
对象适配器:通过组合的方式实现,适配器类持有适配者类的引用。
类适配器:通过继承的方式实现,适配器类继承适配者类,同时实现目标接口。
适配器的作用是将不兼容的接口转化为兼容接口,以便客户端可以使用。
装饰器模式:
通过组合的方式实现,装饰器类持有组件对象的引用。
装饰器类实现与组件相同的接口,并在其方法中调用组 ...
Not registered via @EnableConfigurationProperties, marked as Spring component, or scanned via @ConfigurationPropertiesScan.
解决方法:@ConfigurationProperties使用spring-boot-configuration-processorjar 轻松地从带有注释的项目中生成自己的配置元数据文件 。该jar包含一个Java注释处理器,在项目被编译时会被调用。要使用处理器,请包含对的依赖 spring-boot-configuration-processor。1.在pom.xml中添加依赖
然后添加@Component注解,声明将这个组件添加进入容器中
但是不建议这样做,一般也可能是IDEA自己犯病了没有帮你加载上。直接运行试试看有没有这个报错,如果没有的话就没必要再搞了。否则容易出现Bean冲突的问题。
JDK 21 报错:Cannot resolve symbol ‘TimeUnit’Java 开发人员在使用 JDK 21 时可能会遇到一个棘手的问题:无法导入 TimeUnit 类。别担心,这只是因为在 JDK 21 中,TimeUnit 类已被转移到了一个新的包——java.time。为了在 JDK 21 中顺利使用 TimeUnit 类,你需要稍作调整。
新的导入方式
要想在 JDK 21 中使用 TimeUnit 类,只需在导入语句中指定新的包名即可:
1import java.time.TimeUnit;
你也可以直接使用 TimeUnit 类的全限定名:
1java.time.TimeUnit.SECONDS;
替代方案:Duration 和 ChronoUnit 类
JDK 21 中,除了 TimeUnit 类,还提供了 Duration 和 ChronoUnit 类,它们可以更精确地表示时间间隔。
Duration 类可以表示从纳秒到数百万年的时间间隔,并提供各种操作时间间隔的方法,例如加、减和比较。ChronoUnit 类则提供了秒、分钟和小时等时间单位,可与 D ...
1. 定义
浅拷贝(Shallow Copy):浅拷贝是在复制对象时,仅复制对象本身及其包含的基本数据类型字段,但对于对象中引用类型的字段,只复制引用地址,而不会复制引用对象本身。换句话说,浅拷贝后的新对象与原对象共享引用类型字段所指向的对象。
深拷贝(Deep Copy):深拷贝则不仅复制对象本身及其基本数据类型字段,还会递归地复制所有引用类型字段所指向的对象,创建出这些对象的副本。深拷贝后的新对象与原对象完全独立,修改一个不会影响另一个。
2. 示例代码
为了更好地理解深拷贝和浅拷贝的区别,以下是一个包含浅拷贝和深拷贝的Java示例。
假设我们有一个包含引用类型字段的类Person,该类包含name(基本类型)和address(引用类型)。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172class Address implements Cloneable ...
回答
“单例模式可以通过反射、序列化/反序列化、以及对象克隆等方式被破坏。
反射:通过反射机制,可以访问私有构造器并创建新的实例。
序列化/反序列化:序列化对象后,再次反序列化时会创建一个新的对象实例。
克隆:通过调用clone()方法可以复制对象,从而破坏单例性。
为防止这些破坏,可以采取以下措施:
防止反射:在构造器中加入防御性代码,检测已有实例并抛出异常。
防止序列化/反序列化:实现readResolve方法,确保反序列化时返回同一个实例。
防止克隆:重写clone()方法,直接抛出CloneNotSupportedException异常。”
如何破坏单例模式?1. 如何破坏单例模式?
虽然单例模式旨在保证一个类只有一个实例,但在Java中,单例模式可以通过以下几种方式被破坏:
(1) 反射机制 通过反射机制可以访问私有构造器,从而创建出新的实例,破坏单例性。
12345Constructor<Singleton> constructor = Singleton.class.getDeclaredConstructor();c ...