- 博客(48)
- 收藏
- 关注
原创 机器学习课程day01 机器学习概述
2.ML机器学习是AI的子集,与其他计算机科学的最大不同在于以往的程序员基于规则编程,但是自然界还有好多规则描述不清楚的,如猫狗图像的识别与分类,如自然语言处理,机器学习让机器自动学习,而不是基于规则的编程(不依赖特定规则编程)1、获取数据 2、数据预处理(缺失值处理、异常值处理等)3、特征工程(特征提取,特征预处理、特征降维等)4、模型训练 5、模型评估 6、模型预测。:依托大数据、强大算力与深度学习算法,AI在视觉、语音、自然语言处理等领域取得突破性进展,进入广泛落地和爆发式增长的新纪元。
2025-12-14 23:02:42
275
原创 探密. git 目录
objects:存放对象 .git/objects/ 文件夹中的子文件夹都是以哈希值的前两位字符命名 每个 object 由 40 位字符组成,前两位字符用来当文件夹,后 38 位做文件。git cat-file -p b44dd71d62a5a8ed3 显示版本库对象的内容(查看commit下的内容)git cat-file -t b44dd71d62a5a8ed3 显示版本库对象的类型 -t类型。git cat-file 命令 显示版本库对象的内容、类型及大小信息。1. HEAD:指向当前的工作路径。
2025-03-05 11:24:01
458
原创 学成在线 支付与学习
我们系统需要与小程序支付接口对接有:下单接口:系统后端调用微信支付的下单接口。支付通知:微信支付调用在线教育系统后端接口。商户订单号查询:系统后端调用微信支付的商户订单号查询接口。支付渠道表,交易单表,退款记录表介绍:实现与第三方支付平台的对接,用户在进行支付时选择支付方式。我们公司已经准备好了相关的基础代码,支付功能的代码是固定的,只需要进行修改调用即可。1.支付:用户点击支付按钮,前端请求订单服务,订单服务请求支付服务,最后支付服务请求微信的下单接口。
2025-01-18 17:18:28
1209
原创 数据结构 数组
作为高级语言编程者,是不是数组就无用武之地了呢?当然不是,有些时候,用数组会更合适些,我总结了几点自己的经验。1.Java ArrayList无法存储基本类型,比如int、long,需要封装为Integer、Long类,而Autoboxing、Unboxing则有一定的性能消耗,所以如果特别关注性能,或者希望使用基本类型,就可以选用数组。2.如果数据大小事先已知,并且对数据的操作非常简单,用不到ArrayList提供的大部分方法,也可以直接使用数组。
2025-01-17 15:08:38
787
原创 自动售货机
Vue.js和Element UI 、Echarts、Taro、React、Flutter、腾讯地图1.Vue.js是一个渐进式的JavaScript 框架,用于构建用户界面,以其轻量级、易学易用和响应式数据绑定等特点,使得我们项目的前端开发更加灵活和高效。2.Element UI 提供了大量的高质量组件,帮助我们快速搭建起美观的管理界面。3.Echarts帮助我们统计、渲染图表数据。4.React采用虚拟 DOM 和组件化的设计理念,能够高效地构建复杂且交互式的用户界面。
2025-01-12 21:44:14
1072
原创 zzyl逐字稿
用的比较新的4.0大模型。护理等级:这个模块在养老院系统的主要作用是,让将要入住的老人进行选择配置,比如有一个老人入住养老院,在前期呢有个健康评估系统,会先给老人做一个健康评估,然后健康评估系统会根据老人的健康评估报告以及老人的年龄这些综合因素,去推荐老人选择不同的护理等级,不同的护理等级包含的护理项目是不同的,价格也是不一样的。由于目前设备上报的数据都是存储到了MySQL的表中,设备上报的数据是巨大的,一天大概能上报70万的数据,当家属查看老人的历史数据的时候,由于表存储的数据较多,查询的效率就会很低。
2025-01-12 21:38:50
1160
原创 积分系统的设计
学习是需要正反馈的,这样学员才能有源源不断的动力去继续学习。为了激励学员,我们需要设定一个学习系统。优秀的学员给予一定的奖励,比如奖励优惠券。大家互相比拼的,刺激学员持续学习,互相卷起来。而且不仅在天机学堂项目,很多其它类型项目中也都会有积分、排行榜功能。
2025-01-09 21:51:26
898
原创 签到系统的设计
签到的核心要素是:谁签到,啥时候签到同时需要考虑一些功能:补签功能,按年月日统计的功能,所以数据表的字段应该有:id ----主键iduser_id ----用户idyear ----签到年份month ----签到月份date ----签到日期is_backup ----是否补签由此设计出数据库。
2025-01-09 21:38:53
699
原创 点赞系统的设计
一、点赞功能整体剖析在各类社交、电商等项目里,都具有点赞功能,为确保其能便捷地融入不同项目的多样化业务场景,点赞功能的实现应该和其他模块相互独立,即实现解耦。如此一来,后续有需求时,只需将精心设计好的点赞微服务模块嵌入项目即可,使其具备良好的可移植特性。与此同时,一个通用性强的点赞功能还得拥有应对高并发读写请求的出色能力。起初,考虑运用 MYSQL 来实现点赞功能并存储相关点赞数据,可以引入mq进行解耦。二、基于 MYSQL 与 MQ 搭建点赞功能架构要打造一套完备且实用的点赞功能体系,像避免同一用户对同一
2025-01-08 21:51:20
1096
原创 黑马点评 登录部分
用户在提交手机号后,会校验手机号是否合法,如果不合法,则要求用户重新输入手机号如果手机号合法,后台此时生成对应的验证码,同时将验证码进行保存,然后再通过短信的方式将验证码发送给用户用户将验证码和手机号进行输入,后台从session中拿到当前验证码,然后和用户输入的验证码进行校验,如果不一致,则无法通过校验,如果一致,则后台根据手机号查询用户,如果用户不存在,则为用户创建账号信息,保存到数据库,无论是否存在,都会将用户信息保存到session中,方便后续获得当前登录信息。
2025-01-03 18:36:41
1495
原创 Spring web 琐碎知识点 配置文件 会话技术
什么是会话?在我们日常生活当中,会话指的就是谈话、交谈。在web开发当中,会话指的就是浏览器与服务器之间的一次连接,我们就称为一次会话。在用户打开浏览器第一次访问服务器的时候,这个会话就建立了,直到有任何一方断开连接,此时会话就结束了。在一次会话当中,是可以包含多次请求和响应的。比如:打开了浏览器来访问web服务器上的资源(浏览器不能关闭、服务器不能断开)第1次:访问的是登录的接口,完成登录操作第2次:访问的是部门管理接口,查询所有部门数据第3次:访问的是员工管理接口,查询员工数据。
2025-01-01 15:03:56
772
原创 JavaEE 3大组件 Listener Servlet Filter
Servlet: Server Applet,翻译为运行在服务端的Java小程序,是sun公司提供一套规范( 接口 ),用来定义我们的代码怎么写才能被tomcat识别。本质:接口,一个类想要被tomcat正确识别,那么这个类就必须直接或间接的实现Servlet接口。任务:接收请求,处理请求,返回响应。
2024-12-28 18:40:32
977
原创 java web mybatis-puls
Mybatis-Plus(简称MP)是一个Mybatis的增强工具,在Mybatis的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus 🚀 为简化开发而生,下面是其特性:无侵入:只做增强不做改变,不会对现有工程产生影响强大的 CRUD 操作:内置通用 Mapper,少量配置即可实现单表CRUD操作支持 Lambda:编写查询条件无需担心字段写错支持主键自动生成内置分页插件步骤1 创建数据库及表。
2024-12-26 21:13:59
1114
原创 javaweb 04 springmvc
0.1 在上一次的课程中,我们开发了springbootweb的入门程序。 基于SpringBoot的方式开发一个web应用,浏览器发起请求 /hello 后 ,给浏览器返回字符串 “Hello World ~”。其实呢,是我们在浏览器发起请求,请求了我们的后端web服务器(也就是内置的Tomcat)。而我们在开发web程序时呢,定义了一个控制器类Controller,请求会被部署在Tomcat中的Controller接收,然后Controller再给浏览器一个响应,响应一个字符串 “Hello World
2024-12-26 16:42:21
1115
原创 java web03 springAOP
Spring 是一款目前主流的 Java EE ==轻量级、全栈型、开源框架== ,Rod Johnson 提出并创立,目的是用于简化开发,目前流行版本是5系列Spring全称 Spring Framework,其功能有:==IOC-控制反转,轻松实现层间解耦====AOP- 面向切面编程,轻松实现公共代码抽取====MVC - 开发web应用程序==事务 - 无需编写代码,即可实现数据库事务管理测试 - 与测试框架集成、web 单元测试。
2024-12-25 20:18:45
818
原创 java web 01 mybatis
0.1 MavenMaven是apache提供的一个项目管理工具,它的作用就是管理项目3个作用1.依赖管理依赖管理主要指的是项目怎样引入依赖包,maven会将所有需要的依赖包放在本地仓库中,然后每个项目通过配置文件引入自己所需要的那部分2.统一项目结构在项目开发中,当你使用不同的开发工具 (如:Eclipse、Idea),创建项目工程时:3.项目构建maven提供了标准的、跨平台(Linux、Windows、MacOS) 的自动化项目构建方式3套生命周期clean:清理工作。
2024-12-24 20:57:56
1205
原创 java web springboot
总之:SpringBoot最主要作用就是帮我们快速的构建庞大的spring项目,并且尽可能的减少配置,让程序员去关注业务而非配置。SpringBoot的约定大于配置,即SpringBoot的大量配置都有默认值,如果我们不去写配置就使用默认的。使用SpringBoot之后,程序员只需按照它规定的方式去进行程序代码的开发即可,而无需再去编写一堆复杂的配置。父工程,它内部已经锁定了一些常见依赖的版本号,故而在我们自己开发的工程中无需再指定依赖的版本。4. 为什么我们访问程序的时候要用8080端口,谁定义的。
2024-12-23 18:54:10
889
原创 黑马头条day01 微服务搭建
如这种静态资源,采用http的发送到本地8803端口的静态资源请求,而nginx配置的监听8801、8802、8803,所以请求走到nginx,nginx的admin配置文件可以发现未特殊声明的都走到location /,也就是转到html/toutiao/admin-web/目录下静态资源都在这个下面。也就是静态资源nginx自己就处理了另外如登录请求是个动态资源请求还是由上面的配置文件发现admin_gateway都转到了 upstream heima-admin-gateway{
2024-12-16 18:52:45
603
原创 HashMap的put与扩容机制
4.3 遍历table[i],链表的尾部插入数据,然后判断链表长度是否大于8,大于8的话把链表转换为红黑树,在红黑树中执行插入操 作,遍历过程中若发现key已经存在直接覆盖value。p代表计算出下标的位置,e初始化是空的,最后根据e是否为空统一处理,为空说明没有更新操作,返回空,e不为空说明有更新赋值的操作,最后统一更新值并返回旧值。如果是链表,则需要遍历链表,可能需要拆分链表,判断(e.hash & oldCap)是否为0,该元素的位置要么停留在原始位置,要么移动到原始位置+增加的数组大小这个位置上。
2024-11-24 11:00:50
516
原创 Java并发编程 第八章 共享模型之工具
/ 独占锁,同步器类@Override//加上了锁,并设置owner为当前线程@Override//可以加写屏障@Override// 是否持有独占锁有了自定义同步器,很容易复用 AQS ,实现一个功能完备的自定义锁// 自定义锁(不可重入锁)@Override // 加锁(不成功会进入等待队列)@Override // 加锁,可打断@Override// 尝试加锁(只尝试一次)@Override// 尝试加锁带超时(只尝试一次)
2024-09-24 19:31:54
998
原创 Java并发编程 第七章 共享模型之不可变对象
定义 英文名称:Flyweight pattern. 当需要重用数量有限的同一类对象时出自 "Gang of Four" design patterns归类 Structual patterns。
2024-09-08 21:27:17
1074
原创 Java并发编程 第五章 共享模型之内存
本章重点讲解了 JMM 中的可见性 - 由 JVM 缓存优化引起有序性 - 由 JVM 指令重排序优化引起happens-before 规则原理方面CPU 指令并行volatile模式方面两阶段终止模式的 volatile 改进同步模式之 balking。
2024-09-07 11:31:31
1236
原创 Java并发线程 共享模型之管程 5
每个线程都有自己的一个 Parker 对象,由三部分组成 _counter , _cond 和 _mutex 打个比喻线程就像一个旅人,Parker 就像他随身携带的背包,条件变量就好比背包中的帐篷。很多教程中把饥饿定义为,一个线程由于优先级太低,始终得不到 CPU 调度执行,也不能够结束,饥饿的情况不易演示,讲读写锁时会涉及饥饿问题。如果这时线程还在运行,那么下次他调用 park 时,仅是消耗掉备用干粮,不需停留,继续前进,因为背包空间有限,多次调用 unpark 仅会补充一份备用干粮。
2024-09-04 17:09:13
1407
原创 java并发 共享模型之管程 4.
obj.wait() 让进入 object 监视器的线程到 waitSet 等待obj.notify() 在 object 上正在 waitSet 等待的线程中挑一个唤醒obj.notifyAll() 让 object 上正在 waitSet 等待的线程全部唤醒它们都是线程之间进行协作的手段,都属于 Object 对象的方法。必须获得此对象的锁,才能调用这几个方法try {因为没获取此对象的锁。如下就可以了log.debug("执行");
2024-09-04 10:57:31
1353
原创 java并发 第四章共享模型之管程 3 synchronized 原理
轻量级锁的使用场景:如果一个对象虽然有多线程要加锁,但加锁的时间是错开的(也就是没有竞争),那么可以使用轻量级锁来优化。轻量级锁对使用者是透明的,即语法仍然是 synchronized假设有两个方法同步块,利用同一个对象加锁1. 创建锁记录(Lock Record)对象,每个线程都的栈帧都会包含一个锁记录的结构,内部可以存储锁定对象的Mark Word。
2024-09-02 20:56:18
957
原创 Java并发 第四讲 共享模型之管程 2变量的线程安全分析
否,Spring不额外设置scope的话均为单例,不是线程安全的,可设置为环绕通知变成局部变量解决。sdf虽然是局部变量,但foo是抽象方法有可能将他的引用暴漏给外部,因为 foo这种方法的行为是不确定的,可能导致不安全的发生,被称之为外星方法。这里说它们是线程安全的是指,多个线程调用它们同一个实例的某个方法时,是线程安全的。i++虽然不是原子操作,但它是局部变量,不同的方法调用会在不同的栈帧里创建,不存在共享的问题,否,是,是,否,否,最后一个因为加了final只是地址不变,但地址指向的东西有可能变。
2024-09-02 19:22:29
776
原创 Java并发编程 第四章 共享模型之管程 上
先看一段代码结果有可能是0有可能是负数还有可能正数这是因为i++和i--并不是原子操作i++实际会产生如下的 JVM 字节码指令:单线程下这八条指令是顺序执行(不会交错)没有问题。但多线程下这 8 行代码可能交错运行出现负数的情况出现正数的情况一个程序运行多个线程本身是没有问题的,问题出在多个线程访问共享资源,多个线程读共享资源其实也没有问题,但在多个线程对共享资源读写操作时发生指令交错,就会出现问题。一段代码块内如果存在对共享资源的多线程读写操作,称这段代码块为临界区。
2024-08-30 21:00:29
1302
原创 Java并发编程之Java线程下
在一个线程 T1 中如何“优雅”终止线程 T2?这里的【优雅】指的是给 T2 一个料理后事的机会。1. 错误思路1.使用线程对象的 stop() 方法停止线程,stop 方法会真正杀死线程,如果这时线程锁住了共享资源,那么当它被杀死后就再也没有机会释放锁,其它线程将永远无法获取锁2. 使用 System.exit(int) 方法停止线程目的仅是停止一个线程,但这种做法会让整个程序都停止,杀鸡用牛刀。2. 正确思路 两阶段终止模式//重新设置打断标记。
2024-08-28 17:35:59
575
原创 Java并发编程之Java线程中
改为start后区别1.直接调用 run 是在主线程中执行了 run,没有启动新的线程2.使用 start 是启动新的线程,通过新的线程间接执行 run 中的代码start只能调用一次,run可以调用多次。
2024-08-28 16:58:28
437
原创 Java并发编程之Java线程 上
当 Context Switch 发生时,需要由操作系统保存当前线程的状态,并恢复另一个线程的状态,Java 中对应的概念就是程序计数器(Program Counter Register),它的作用是记住下一条 jvm 指令的执行地址,是线程私有的状态包括程序计数器、虚拟机栈中每个栈帧的信息,如局部变量、操作数栈、返回地址等。其实就是线程,每个线程启动后,虚拟机就会为其分配一块栈内存。方法1 是把线程和任务合并在了一起,方法2 是把线程和任务分开了。查看指定 Java 进程(PID)的所有线程状态。
2024-08-28 15:48:06
573
原创 Java并发编程 进程与线程
操作系统中有一个组件叫做任务调度器,将 cpu 的时间片(windows下时间片最小约为 15 毫秒)分给不同的程序使用,只是由于 cpu 在线程间(时间片很短)的切换非常快,人类感觉是 同时运行的。但如果是四核 cpu,各个核心分别使用线程 1 执行计算 1,线程 2 执行计算 2,线程 3 执行计算 3,那么 3 个线程是并行的,花费时间只取决于最长的那个线程运行的时间,即 11ms 最后加上汇总时间只会花费 12ms 注:需要在多核 cpu 才能提高效率,单核仍然时是轮流执行。
2024-08-28 15:02:14
1514
原创 Spring源码 第十八讲 静态通知调用
可见before已经转化为环绕通知,因为MethodBeforeAdviceInterceptor implements MethodInterceptor, 实现了环绕通知。after同理,最后一个就是环绕通知所以没转化。因为调用链过程中某些同志要用到调用链对象。1. proceed() 方法调用链中下一个环绕通知。2. 每个环绕通知内部继续调用 proceed()3. 调用到没有更多通知了, 就调用目标方法。模拟调用链过程, 是一个简单的递归过程。1. 统一转换为环绕通知。3. 模拟调用链过程。
2024-08-28 10:25:08
503
原创 Spring源码第十七讲 @Aspect 到 Advisor
Before 前置通知会被转换为下面原始的 AspectJMethodBeforeAdvice 形式, 该对象包含了如下信息。有【资格】的 Advisor 一部分是低级的, 可以由自己编写, 如本例 A17 中的 advisor3。有【资格】的 Advisor 另一部分是高级的, 由解析 @Aspect 后获得。它的调用时机通常在原始对象初始化后执行, 但碰到循环依赖会提前至依赖注入之前执行。第一个是Spring给所有代理添加的,第二个是Config里的低级切面。此时先生成Bean1的代理再初始化。
2024-08-27 20:27:30
643
原创 Spring源码第十六讲 切点匹配
先判断方法上是否加了注解,再判断类上是否加了注解,前三个分别输出true,false,true,比较简单,最后这个应该也输出true但输出了false因为MergedAnnotations.from(method);@Transactional底层并不是AspectJExpressionPointcut实现,因为@Transactional用法比较复杂,除了加在方法上还可以加在类上。输出两个matches,应该只匹配bar方法,所以应该false第二个true;3. @Transactional底层实现。
2024-08-26 19:55:13
336
原创 Spring 源码第十三讲 cglib 代理进阶
3. methodProxy.invokeSuper 也是不反射调用,它会正常(间接)调用代理对象的方法,可以省略目标对象。2. methodProxy.invoke 是不反射调用,它会正常(间接)调用目标对象的方法(Spring 采用)五个参数分别为目标类型、代理类型、方法参数及返回值的描述、增强功能方法名和原始功能方法名。1. method.invoke 是反射调用,必须调用到足够次数才会进行优化。总结:和 jdk 动态代理原理查不多。2. 调用目标时有所改进,见上面代码。
2024-08-21 15:19:28
229
原创 Spring 源码第十二讲 jdk 动态代理进阶
在方法内每次都会调用,其实调用一次就行,放到静态代码块中,3.调整了foo和bar抛异常的类型,按运行时异常和检查异常抛。将需要增强的功能在invoke中实现,代理类只需要调用代理目标的invoke方法就行。代理类此时不需要以来目标了,甚至都不需要知道目标的存在。但这么写功能增强和调用目标都写死了,应该写成抽象方法,用的时候提供抽象实现,有利于将来扩展。此时foo方法和bar方法都时void,若有返回值还需要改进。}接口加了一个bar方法,它在代理类掉的也是foo的输出。
2024-08-21 10:35:00
424
原创 Spring源码第十讲 AOP 实现之 agent 类加载
2. 运行时需要在 VM options 里加入 -javaagent:C:/Users/manyh/.m2/repository/org/aspectj/aspectjweaver/1.9.7/aspectjweaver-1.9.7.jar把其中 C:/Users/manyh/.m2/repository 改为你自己 maven 仓库起始地址。反编译出来可见没有添加.before语句,这是因为这种方法不是增强字节码而是在类加载阶段进行增强。可以由阿尔萨斯查看。
2024-08-20 20:57:52
435
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅