- 博客(78)
- 收藏
- 关注
原创 python图像类型分类汇总
sns.distplot(data_df[cn][data_df["Class"] == 0], bins=100)# V1 正常 橘色表示。sns.distplot(data_df[cn][data_df["Class"] == 1], bins=50)# V1 异常 绿色表示。# Total_Revolving_Bal字段与Attrition_Flag字段的关系(箱型图)# Months_Inactive_12_mon字段与Attrition_Flag字段的关系(# 被盗刷的用户-特征相关性展示。
2024-08-31 22:37:07
1549
2
原创 day17
今天发现进行代码检查的时候,报的最多的警告就是e.print不能让堆栈的报错直接打印在控制台,可能会泄露信息,于是我就加紧把impl里面的try-catch去掉,换成在controller里面写try-catch,并且使用logger用日志来记录错误信息;代码提交到代码仓库之后,生成一个构建任务,再生成一个软件包(可执行的),然后再在测试服务器上(也就是类生产环境)运行,一旦代码改变就会生成一个构建任务,所以测试的时候是不希望改代码的,一旦修改,必须重新测试。08日08月2024年。
2024-08-08 21:57:30
181
原创 day16
今天说是实现了拓展任务,其实本来拓展任务就是有源码的,我所做的就是让代码在自己的项目上跑起来,但是就这样还是遇到了很多的问题,险些导致要加班才能完成,感觉真是很挫败,以后的路真的还有好长。今天主要遇到的问题就是,python的环境问题,刚开始还能怀疑是代码出了问题,但实际上还有可能是版本不对导致的函数的返回值啊可能有一些不一致的地方,其实就是包导的不对,因为。还有一个错误就是,也是当时太着急了,总是报上一个错,然后又发现userlogin不好用了,经队友提醒才发现,是因为更新项目后,
2024-08-07 22:44:03
305
原创 day15
最多能同时处理几个人,直接限流,服务降级,要么是锁表,设置让人不能在对表执行操作,或者设置同步代码块,这样就会只让一个线程执行操作,就像上厕所,只能同时有一个人上厕所,上厕所会锁门,这样剩下的人只能等着,这样就保证了同一时刻获取到的订单一定是自己刚添加进去的,还可以再加上一些用户名的限定或者其他的限定之类的,更进一步保证能够获取到的最新的id一定是属于自己刚添加进去的记录的id,而不是别人的订单id;今天主要是老师讲了讲如何完成购物车的任务,然后就让我们做项目。06日08月2024年。
2024-08-06 23:28:31
159
原创 day14
用户返回token之后,本身数据库是存储在磁盘中的,但是如果使用内存查询的话,就会很快。redis/内存数据库,键值对存储,查询起来非常的快,因为断电易失虽然可以做持久化,所以本身不会存储什么重要数据,一般用redis做缓存,存储token,每次校验token是否存在于redis中,在生成token的时候就存入redis,如果不存在,就直接重新登陆即可,但是还要注意,redis里面存储是没有有效期限的,就是普通存储,所以,必须手动清除不用的token,清理掉垃圾信息。05日08月2024年。
2024-08-05 21:59:56
148
原创 day12
今天几乎没有遇到什么问题,遇到也是很快就解决了.我发现组员的sql语句不能执行是因为他最后有一个group by real_name,phone,但是它并不能保证其他列在这两个一样的时候,必然相同,也就是当这两个一样的时候,如果出现其他的字段不同,那么数据库没法在分组的时候判断舍弃那一条记录保留那一条记录,所以就必然会失败,这不是内容的问题,这是数据库的原则的问题。看异常报错的时候,蓝色的文件通常是自己写的,灰色文件是框架的文件不用看,百度的时候,用一堆错误的最上面的那句话来百度;01日08月2024年。
2024-08-03 22:17:06
135
原创 day11
今天我实在得反思自己,有个组员在提交代码到远程仓库的时候,因为我的错误指导而把代码删掉了,给人家整哭了,还是得思考一下,我能接受的结果和其他人能接受的结果是不一样的,我看来这代码也不难写,就算删掉重新写回来就是了,但是对于人家的打击可能是致命的,以后还是小心一点,谨慎抉择,在自己的电脑上试验过了才敢说怎样。今天主要是老师讲了讲项目的一些实体类的代码,然后就让我们做项目。大概听明白了工作原理,项目的任务规划已经完成。01日08月2024年。
2024-08-02 22:16:01
111
原创 day10
总结一下今天的内容就是security就是一组Filter,先进行用户名密码的处理,具体就是先将用户名密码封装成一个对象,然后层层调函数处理,到UserDetailsService层的时候,才最终实现用loadUserByUsername的方法在数据库中查找,如果查到了,就讲包含权限的用户信息封装成一个UserDetails对象,返回并存储到authentication对象中,并最终保存到security上下文中,以便后续的使用;大概听明白了工作原理,项目的任务规划还没有做完。30日07月2024年。
2024-08-02 22:15:25
149
原创 day09 工作日报表
再进行各种异常的抛出;最后进行权限的判断,这时候就用到了之前存储的authentication对象了,如果有权限(通常是用户名密码正确,且并非恶意),就返回一个token,下一次客户端浏览器访问的时候,需要拿着这个token来访问,如果确定非空,且权限正确就予以访问,这就需要在UsernamePasswordAuthenticationFilter前面加一个Filter来过滤了,如果确认了token信息,那就直接跳过查询保存authentication对象的过程,反之就接着一步一步走。
2024-07-31 21:11:38
248
原创 day07 项目启动以及git
spring 负责整合各种框架,把new对象的部分交给spring去做,对象new不出来,项目就启动不起来,这样可以有效保证所需要的对象都在容器中存在,后续的部分都可以顺利执行控制反转:业务对象创建依赖资源的控制权反转给容器依赖注入:容器把业务对象依赖的资源注入到业务对象容器:IOC容器业务对象:servlet/action/controller依赖资源:servicemybatis用于取代dao层。
2024-07-29 22:16:58
463
原创 day06 项目实践:router,axios
今天几乎没有讲什么新内容,就是一起做项目,只有一个小小的知识点,就是关于vue组件的生命周期钩子,其中最重要的四个函数——beforeCreate():组件创建之间执行created():组件创建之后立即执行beforeMount():组件渲染前执行mounted():组件渲染完毕之后立即执行。
2024-07-27 21:40:25
662
原创 day03 swagger
联表查询中,针对一对多的情况,需要在“一”的实体类中加入List<>属性来加入“多”的那一类的对象数组,这样就能在查询得到结果的时候能够显示多表的情况,于是在“多”的那一类中的mapper、service层中写入的东西就和其他查询的格式一致,最后的控制层也和其他查询一致,那么只需要再修改xml中的配置,更新resultMap即可。注意sql语句中需要的参数需要用#{参数名}代替,列名和表明最好加``反引号,防止被mysql看作关键字。除此之外,其他的类都没有变化。
2024-07-25 08:55:58
360
原创 day02 mybatis
RequestMapping会过滤请求,仅让符合要求的请求通过(@GetMapping同理为get请求过滤)jdk版本高的,需要使用@RequestParam(“参数”)获取传递的参数。还要引入mysql依赖以及mybatis和sprintboot连接的依赖。@Resource会在编译时候为里面的空指针变量创建对应的对象赋值。前后端分离的项目,必须在控制层写@RestController。second: 使用xml文件,如果繁琐就使用xml配置。first:使用注解@Select。
2024-07-23 18:02:43
301
原创 day01 模块化开发
每个project 包含若干个 module .建立 project, 本地maven 方式, 这个项目 不需要任何 编码, src 目录可以删除。
2024-07-23 08:51:44
285
原创 day03
/传递的参数是 标签里面的name的值。//传递的参数是标签里面的id的值。**** 只有一个标签,这个标签只能使用name获取到,这个使用,使用getElementsByName返回的是一个数组,i++) { //通过遍历数组,得到每个标签里面的具体的值。** open("打开的新窗口的地址url","","窗口特征,比如窗口宽度和高度")- window.prompt("在显示的内容","输入框里面的默认值");
2024-07-16 22:11:54
407
原创 Java学习笔记03:核心类
Object类是顶级父类,所有类都直接或间接继承了Object类,故而所有类都可调用其中的方法,都可以赋值给Object。装箱是将栈中的数据封装成类的对象存储到堆中。拆箱是将对象转换成基本类型数据值,放到栈中。除去线程安全,至于方法都一致。Random示例——
2024-04-12 16:44:16
991
原创 Java学习笔记02:面向对象
null的另一个用途就是释放内存,在Java中,当某一个非null的引用类型变量指向的对象不再使用时,可以通过让其指向null来加速其被JAM内存回收。对象数组中每个元素都是对象,所以必须单独初始化,即每一个都需要用new来进行初始化,只能动态初始化,所以需要new两遍(第一遍长度,第二遍对象),数组中存储的是对象的地址。创建一个对象,栈上会分配空间存储对象在堆中的地址,即对象的引用,然后创建该对象的实际物理空间,即在堆中为该对象分配空间,所有类的对象都是动态分配空间。
2024-04-05 10:23:50
675
原创 自学算法:03 一维动态规划
如果不为'0',那就要进一步判定当前字符是否能和下一个字符构成不大于26的数字,如果没有这种情况,那就返回区间[0,(i + 1)]的方法数,反之,就再加上区间[0,(i + 2)]的方法数,其实这样就相当于划分当前字符为合法数字,还是划分相邻两个字符为合法数字。会发现改动的部分很少,但是要注意,因为每次对dp数组的求解都完全依赖于它后面的值,所以必须初始化下标n的dp值为1,也可以理解能划分到下标n的字符就证明这个划分是对的,所以如果不对dp[n]初始化,就没有加上这个对的划分。
2024-03-24 11:23:45
520
原创 自学算法:02 二分搜索
无论整体是否有序,只要确定判定完中间值之后,可以进而确定哪一侧必然存在要找的值(或者某侧必然不存在要找的值),也就是缩小一半的寻找范围,就可以使用二分搜索法。
2024-03-23 09:32:56
374
原创 自学算法:01 前缀和与差分
题目:有数组:{1,3,7,5,2},q次询问[L, R]区间和。首先明确Sum[ i ] 是数组在区间[ 0, i ]的和,然后利用公式:建立Sum数组,于是要求区间[L, R]的和,就只需要计算Sum[ R ] - Sum[ L ] 即可。
2024-03-22 22:01:29
204
原创 力扣 day 2024 / 03 /19 | 9. 回文数
主要是一个数前半部分的数值和一个数后半部分的数值进行比较,因为每次取余之后得到的都是数的最后一位,所以这样构造的数相当于反转了这个数,不用全部转换,只要转换一半就能判断,判断要注意奇数位和偶数位的区别。除此之外,前面的判断条件也很巧妙,只要这个数大于0但是最后一位数是0,那么这个数就必然不是回文数。官方题解,用JAVA转写的,这回想要练习一下代码的书写规范。暴力2,转换成string——暴力1,vector数组——是一个回文整数,返回。
2024-03-19 22:17:05
197
原创 代码随想录算法训练营day61丨一刷总结
然后因为递归函数其实是用栈来实现的,所以说前中后序的遍历是可以用栈来实现的。动态规划真的是进行了好多好多章节,真的是做题做到崩溃了都,它有编辑距离问题,背包问题,股票问题都很复杂,我感觉最复杂的最难搞的其实是dp数组的定义,如果对dp数组的定义有很得到的见解的话,其实它的推导公式就会变得简单一些,但是关键这个dp数组的定义有时候就,可能我比较傻,反正就是想不到,但是最后文章里面也给出了dp数组的定义通常就是题目要求解的问题,其实做的几道题里面大多数都是这样,当然也有例外,还是得多做题积累。
2024-03-15 23:43:08
404
原创 代码随想录算法训练营day60|第十章 单调栈part03
这道题还有一个需要注意的点是。这道题的辅助数组储存的是每个柱子左右边第一个小于当前柱子高度的柱子的下标,而接雨水找的是左右两边的最值,最值可以通过max函数来实现,但具体到第一个小于当前柱子高度这种,那就只能再嵌套一个循环了,嵌套使用的是while循环,逻辑是从当前位置向它的左/右边去找,一直找到下标为零处/末尾处,所以必须要先初始化最初用到的值,初始化成多少也是有讲究的,最左端的下标值没有左边的元素,所以初始化下标为-1,这样不仅合乎逻辑,也能用同样的公式来推导出矩形的面积,好吧其实有点废话了。
2024-03-15 23:09:06
521
原创 代码随想录算法训练营day59|第十章 单调栈part02
每次如果遍历到大于栈顶元素的值,那就先记录一下当前的栈顶元素,然后再弹出这个栈顶元素,然后再判断一下这个栈里面是否还剩有元素,如果剩有元素,证明可能构成一个凹槽用来盛水,那就要计算盛水的水量,先计算水的高度,水的高度取遍历的柱子的高度和栈顶高度的最小值再减去之前储存的那个栈顶元素,水的宽度当然就是遍历的元素的下标和现在栈顶元素的下标的下标差再减一(因为求的是中间的部分,用来盛水的那种宽度),相乘求得水量;注意这回 i 代表的不直接是nums的下标,而更多的是遍历次数,取余之后才会是nums下标。
2024-03-13 22:33:26
1135
原创 代码随想录算法训练营day58|第十章 单调栈part01
如图所示,一旦遍历到的元素大于栈顶元素,那就没办法维持顺序(从栈顶到栈底单调递增了),所以想要放入当前元素,需要将栈顶元素弹出,直到栈顶元素再也不小于当前遍历到的元素为止或栈为空,每弹出一个元素,在这道题中就相当于找到了之后比它温度大的一天,于是就要同步更新res数组记录二者的距离,这时候就凸现出单调栈存入下标的必要性了,这样可以直接操作对应下标的res值,等于当前遍历到的元素下标减去弹出的下标。就可以了,如果需要使用对应的元素,直接T[i]就可以获取。大家可以读题,思考暴力的解法,然后在看单调栈的解法。
2024-03-13 19:45:23
557
原创 代码随想录算法训练营day57|第九章 动态规划part17
初始化时候,考虑当i 和j 相同的情况,由于递推公式:dp[i][j] = dp[i + 1][j - 1] + 2,看出递推公式是计算不到 i 和j相同时候的情况。除此之外,每次 j 的遍历里面第1次执行dp[i][j] = dp[i + 1][j - 1] + 2,所用的之前的值dp[i + 1][j - 1]实际上为0( j 从 i + 1开始遍历,每次恰好错过初始化这个值),所以在仅有两个元素的时候,如果这两个元素恰好相等或不相等,都能按照这种递推方式来推导当前值。注意还要用res来捡拾结果。
2024-03-13 00:12:30
1082
原创 代码随想录算法训练营day54|第九章 动态规划part15
t[ j ]) dp[ i + 1 ][ j + 1 ] = max(dp[ i ][ j + 1 ], dp[ i + 1 ][ j ]),但实际上已经确定了s串是长度较小的字符串,i往前挪所得到的最大公共子序列长度一定会变小(而且这道题是外层遍历的s串,所以如果可以最终返回true,i之前的字符一定已经找到对应的了),所以dp[ i ][ j + 1 ]一定小于dp[ i + 1 ][ j ]。dp[i][j]是以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dp[i][j]。
2024-03-11 23:06:01
619
原创 代码随想录算法训练营day53|第九章 动态规划part14
如果text1[i - 1] 与 text2[j - 1]相同,也就是找到了一个公共元素,故而也就要在原来的基础上加一,所谓原来的基础也就是左上角的dp[i-2][j-2],为什么要让指向两个字符串的指针同时往回退一个就储存着原来的基础呢,这是因为既然text1的(i - 1)处和text2的(j - 1)处所对应的元素相等,那就要往前倒,看[0, i - 2]和[0, j - 2]范围内的情况是怎样的,所以dp[i][j] = dp[i - 1][j - 1] + 1;1143.最长公共子序列。
2024-03-10 18:37:52
1099
原创 代码随想录算法训练营day52|第九章 动态规划part13
明确了这一点,要理解需要两层嵌套遍历就容易一点,要依次更新每一个dp[i],就必须每次都遍历一整遍前面的nums,一旦发现有小于当前nums[i]的,就证明当前nums[i]可以作为原来(以nums[j]为结尾的)子序列的新结尾,并且试图更新dp[i]的值,注意外层遍历从下标1开始(0前面没有元素,不可以用来更新dp[0]),内层循环从0开始到 i 前结束(遍历所有可能成为 以nums[i]结尾子序列的倒数第二个值 的数)。本题相对于昨天的动态规划:300.最长递增子序列 最大的区别在于“连续”。
2024-03-10 12:32:08
988
原创 代码随想录算法训练营day51|第九章 动态规划part12:买卖股票总结
题目中每天的状态可以是:今天持有股票,所以继续持有或者直接卖出;今天不持有股票,且不在冷冻期前提下,选择购买或者不购买,在冷冻期前提下,只能不购买。相对122.买卖股票的最佳时机II ,本题只需要在计算卖出操作的时候减去手续费就可以了,代码几乎是一样的,可以尝试自己做一做。本题加了一个冷冻期,状态就多了,有点难度,大家要把各个状态分清,思路才能清晰。一个路子,我选择在买入的时候同时减去fee,其他一致。文章里面是按照分成四种状态来分析的——309.最佳买卖股票时机含冷冻期。122.买卖股票的最佳时机II。
2024-03-08 13:26:58
930
原创 代码随想录算法训练营day50|第九章 动态规划part11
进一步,多次交易的本钱是dp[i-1][0],这个值是经历多次交易得到的,而这次对于第二次持有股票的递推公式是dp[i][2] = max(dp[i-1][2], dp[i-1][1]-prices[i]),它的本钱是dp[i-1][1],这个值是只(最多)经历过一次交易得到的(dp[i][0]以及dp[i][1]的推导是根据交易一次股票的前提推导的),故而它必然只能是第二次交易(最多)。这道题一下子就难度上来了,关键在于至多买卖两次,这意味着可以买卖一次,可以买卖两次,也可以不买卖。
2024-03-07 22:45:51
1213
原创 代码随想录算法训练营day48|第九章 动态规划part10
很显然递推公式是:dp[i][0] = max(dp[i - 1][0], -prices[i]) 和 dp[i][1] = max(dp[i - 1][1], prices[i] + dp[i - 1][0])。故而有递推公式:dp[i][0]=max(dp[i-1][0],dp[i-1][1]-prices[i]) 和 dp[i][1]=max(dp[i-1][1],dp[i-1][0]+prices[i])。贪的是最小价格和最大差值(当然是当天或这天后的价格与最小价格的差值),代码很好懂。
2024-03-06 21:14:01
531
原创 代码随想录算法训练营day47|第九章 动态规划part09:198.打家劫舍、213.打家劫舍II、337.打家劫舍III
打家劫舍是DP解决的经典题目,今天就是打家劫舍的一天,这个系列不算难,大家可以一口气拿下。198.打家劫舍首先,dp[i]表示考虑下标i(包括i)以内的房屋,最多可以偷窃的金额。如果偷了当前房间,那么当前的金额就是偷前i-2个房间得到的最大金额+本房间金额,如果没偷,那么当前金额就是偷前i-1个房间得到的最大金额,那么递推公式就很明确了,dp[i] = max(dp[i - 2] + nums[i], dp[i - 1])。
2024-03-06 17:13:01
1009
原创 代码随想录算法训练营day46|第九章 动态规划part08:139.单词拆分、背包问题总结
139.单词拆分回溯——这道题用回溯的做法也能实现,但是需要使用memory数组来记录-以startIndex为起始点是否能保证之后(也包含当前点)全部字符都恰好在wordSet中找到对应的单词,这样有记忆的寻找能减少大量重复搜索,而直接回溯会超时。使用bool作为返回值表示不是一直找而是找到一组即可。完全背包——首先还是要说明想要在数组中找到某个元素,需要将数组存储为set,又因为不用排序,所以unordered_set就够用。
2024-03-06 09:45:51
1008
原创 代码随想录算法训练营day45|第九章 动态规划part07:70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数
这道题本质上是完全背包求最大值的变种,所以自然无关背包和硬币的遍历顺序,主要是初始化和递推公式比较新颖。因为是求最小硬币数量,所以递推公式自然是 dp[j] = min(dp[j - coins[i]] + 1, dp[j]) ,而如果要这么求dp数组的值,势必要将每个dp数组的值初始化为INT_MAX,而因为最终还是要改写dp数组的值的(无论哪个总面值,想要得到最小硬币数,就必须利用过dp[0]的值,这时得到的结果必然是1),所以dp[0]需要初始化为0,理解当然是很容易,0元就是0个硬币。
2024-03-05 17:02:32
511
原创 代码随想录算法训练营day44|第九章 动态规划part06:518. 零钱兑换 II、377. 组合总和 Ⅳ
如果先遍历背包容量,那么求解容量 j 的方法数的时候可能出现同组合不同排列的情况(例如,容量6,可能遇到把{1,5}和{5,1}同时算入的情况,因遍历了全部物品,所以之前的值势必会将这个容量的全部可能情况都考虑在内,故而在填充 dp[6] 的时候,遍历到物品1时会+=dp[5],遍历到物品5时会+=dp[1],而dp[5]必然包含{5}、dp[1]必然包含{1}的情况,所以就相当于算了两遍{1,5},再装入多个物品时同理)。这道题就是典型的完全背包求排列数问题,直接套即可。518. 零钱兑换 II。
2024-03-05 15:30:03
1052
物业门禁“获得授权”界面
2024-07-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人