- 博客(49)
- 收藏
- 关注
原创 StreamAPI 的 Collectors.toMap 方法
由于最终返回的是一个 Map 对象,因此我们需要在 Collectors.toMap() 方法中定义 key、value 的映射关系。(v1, v2) -> v1 表示:如果 key 值相同,则采用前一个 key 对应的 value 值作为最终的 value 值。k -> k.getId() 表示:采用 person 对象的 id 指作为 key 值。v -> v 表示:采用原来的 person 对象作为 value 值。
2024-01-21 12:20:57 363
原创 一个方法重写的小案例
可以发现,虽然子类的 age() 方法的实现是调用了父类 age() 方法,但 say() 方法实际上调用的还是子类重写后的 say()。发现输出结果仍旧是一样的,这说明这里的 this,所指的对象仍旧是子类对象 son,因此调用的还是子类重写后的 say() 方法。此时 this 指代的是父类对象。
2023-11-29 23:13:17 118
原创 map 和 flatMap 的区别
StreamAPI 中的 map 方法,实现是一种映射关系。类似数学中的 x -> f(x)。而 flatMap 方法是在 map 的基础上做了一次 flat。
2023-11-28 22:48:43 309
原创 开发、测试、生产环境
开发环境:开发环境是程序猿们专门用于开发的服务器,配置可以比较随意, 为了开发调试方便,一般打开全部错误报告。简单讲就是项目尚且处于编码阶段,一般这时候会把代码放在开发环境中,不会放在生产环境中。生产环境:是指正式提供对外服务的,一般会关掉错误报告,打开错误日志。简单讲就是所谓的线上,就是正式给用户使用的环境。测试环境:是开发环境到生产环境的一个过渡,配置会参考生产环境,用于测试程序是否有错误,力求在将代码部署到生产环境前对所有问题进行排查解决。
2023-11-26 22:34:36 158
原创 如何使用 arrayList.removeAll(Collection<?> c)?
如果原集合对象的元素数量 < c 中元素数量,那么调用原集合对象的迭代器去遍历原集合,检查元素是否包含在 c 中,并调用原集合迭代器的。如果原集合对象的元素数量 > c 中元素数量,那么调用 c 的代器去遍历 c ,查看元素是否包含在原集合中,并使用原集合的。方法,该方法是通过哈希计算的方式去查询的,因此速度十分快。中存在的所有元素的总体时间复杂度为 O( n * m )。方法来判断是否存在相同的元素,效率与 c 的类型有关。中存在的所有元素的总体时间复杂度为 O( n )。方法的时间复杂度为 O(1)。
2023-10-12 23:09:19 235
原创 @PathVariable、@RequestParam、@RequestBody、@ResponseBody、RequestEntity、ResponseEntity
上面这个接口可通过 get 请求 http://xxxxx/1111 来得到想要的数据,1111 既是 getUser 的方法参数又是。修饰的参数最后通过 key=value 的形式放在http请求的Body传过来,对比下上面的。注解是标识在整个控制器方法上面的。格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。将请求的 body 中的 json 字符串转换为 java 对象。这样我们的后端就可以直接把 json 格式的数据映射到我们的。用于封装整个请求报文,包括请求体、请求头、请求行。
2023-10-08 23:51:03 119
原创 Bean注入方式:@Autowired、@Resource的区别
这种方式就无法正确注入对象了,因为这个时候 Spring 会同时找到多个满足条件的选择,默认情况下它自己不知道选择哪一个。(根据类型进行匹配),也就是说会优先根据接口类型去匹配并注入 Bean (接口的实现类)。(根据名称进行匹配),这个名称通常就是类名(首字母小写)。如果无法通过名称匹配到对应的 Bean 的话,注入方式会变为。属于 Spring 内置的注解,默认的注入方式为。属于 JDK 提供的注解,默认注入方式为。属性(不建议这么做)则注入方式为。这种情况下,注入方式会变为。就是我这里所说的名称。
2023-10-08 22:52:24 231
原创 Java泛型理解
我们都知道 Java 中有形参和实参之分,是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数,其本身没有确定的值。在调用函数时,实参将赋值给形参。而泛型是一种参数化的类型(可以理解为类型形参),它允许在定义类、接口时通过一个「标识」表示类中某个属性的类型或者是某个方法的返回值或参数的类型。这个类型参数将在使用时(例如,继承或实现这个接口、创建对象或调用方法时)确定(即实际传入的类型参数,也称为类型实参)。好处是增强代码的安全性。
2023-10-03 23:36:55 804
原创 hashcode和equals方法的区别与联系
因此,如果我们未进行方法的重写,默认调用的就是 Object 类的 hashCode() 和 equals() 方法,而 Object 类的 hashCode() 是根据当前对象的地址进行计算的,也就是说,我们 new 了两个对象,即使它们的内容是一样的(即我们认为他们逻辑上是相等的),但它们通过 hashCode() 方法计算得到的 hash 值显然是不同的,此时,我们将他们添加到 HashSet 或 HashMap 中就会出现问题。结论 3:hashcode 不相等,equals 一定不相等。
2023-09-06 00:11:35 284
原创 避免IDEA新建项目自动纳入git管理
今天遇到了个很头疼的问题:我在 gitee 上创建了新的远程仓库 test1,然后通过 IDEA 拉取到了本地。随后我打算在该目录下新建新的 module,用来做不同的事情。但问题是,我每次新建 module 它都会成为一个独立的仓库(如下图),这就导致我无法 push 到先前创建的远程仓库中。我发现我这边的问题其实就是每次新建项目或者 module 的时候 IDEA 会自动将项目初始化成一个 git 项目(这不是我想要的)。
2023-07-16 22:30:58 1189 3
原创 跨域问题解决方案
跨域问题本质上是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。它指的服务A对服务B发起请求时,如果有任意一个不同,就会出现请求不到的问题。下面是几个典型的例子:对于复杂请求,比如PUT、DELETE等,在进行跨域请求时会先发送预检请求OPTIONS,然后根据返回的响应信息判断能否跨域,如果可以跨域,再发送真实请求。
2023-05-01 22:39:13 743 1
原创 常见的函数式接口及其应用场景
函数式接口更普遍的一个应用场景是StreamAPI,如进行过滤时的filter(Predicate p),进行映射时的map(Function f),进行遍历输出时的forEach(Consumer c)。函数式接口(Functional Interface)指的是有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。如果我们要定义的接口只有一个抽象方法,且符合这些函数式接口的特点,那么直接用函数式接口就 ok 了。
2023-04-30 23:04:13 1034
原创 函数式接口、匿名实现类、Lambda表达式之间的关系
通过匿名实现类可以对接口中的抽象方法进行快速实现。进一步地,如果该接口是函数式接口(即只有一个抽象方法,其他方法可以有多个),那么可以用lambda表达式来进一步简化代码。
2023-04-30 22:24:23 532
原创 Linux 查看指定目录下占用磁盘空间最大的文件
由于 sort 命令默认是将文本文件的第一列以 ASCII 码的次序排列,不符合我们的需求,因此这里需要增加 -n 参数。如下图可见,当前目录下最大的目录文件为 rlvs/。
2023-04-06 15:25:51 1933
原创 Hexo + github搭建个人博客(2022年7月)
本文方案适用时间节点2022年7月16日。容易踩坑的地方是「部署博客到github」。
2022-07-16 12:39:30 1466
原创 什么是光流法
维基百科的定义光流(Optical flow or optic flow)是关于视域中的物体运动检测中的概念。用来描述相对于观察者的运动所造成的观测目标、表面或边缘的运动。光流法在样型识别、计算机视觉以及其他影像处理领域中非常有用,可用于运动检测、物件切割、碰撞时间与物体膨胀的计算、运动补偿编码,或者通过物体表面与边缘进行立体的测量等等。光流法实际上是通过检测图像像素点的强度随时间的变化进而推断出物体移动速度及方向的方法。光流(Optical Flow)光流定义另外两种有趣的说法:1.光流就是你能
2022-01-14 14:32:58 9908 3
原创 固定随机种子是否有必要?
为什么要固定随机种子固定随机性能解决这些问题:实验结果可复现、有效的对比实验为什么需要随机性?If you can’t get same results, it’s ok, it’s not your fault.In fact, it is often a feature, not a bug.In applied machine learning, we run a machine learning “algorithm” on a dataset to get a machine learn
2022-01-14 14:15:13 1635
原创 Pytorch、TensorFlow、Keras如何固定随机种子
1. 可能引入随机性的地方cuDNN中大量nondeterministic的算法GPU多线程多个num_workers带来的随机性来自复杂模型的随机性(比如一些版本的RNN和LSTM、Conv、Dropout、Dense、GRUCell层的初始化)一些第三方库(因此需要固定对应库RNG的种子)优化器(比如Adam)不同的开发环境,比如软件版本、CPU类型2. Pytorch如何固定随机种子在其他模块的导入或者其他代码之前,在文件的顶端部分通过调用seed_torch()函数固定随机种子
2022-01-14 14:05:57 9467 3
原创 为什么要使用 for 循环
为什么要使用 for 循环Java 中有三种主要的循环结构:while 循环、do…while 循环、for 循环。虽然所有循环结构都可以用 while 或者 do…while 表示,但 Java 提供的 for 循环,使一些循环结构变得更加简单。比如我们要实现变量 x 从 0 增加到 10 ,while 循环的实现方式如下:class Test { public static void main(String[] args) { int x = 0; while(x < 10){
2022-01-14 11:44:52 863
原创 JAVA编程中的静态、非静态变量及方法
Java语言支持的变量类型有:局部变量:类的方法中的变量。静态变量:静态变量也称为类变量,是独立于方法之外的变量,用 static 修饰。实例变量:独立于方法之外的变量,不过没有 static 修饰。局部变量只在声明它的方法、构造方法或者语句块中可见,且当它们执行完成后,变量将会被销毁。而类变量和实例变量均可以被类中的方法、构造方法或者语句块引用。Java 中静态变量(类变量)和实例变量区别在变量调用时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,
2022-01-13 17:33:17 1050
原创 Error occurred when finalizing GeneratorDataset iterator: Failed precondition: Python interpreter...
在使用TensorFlow 2.4.0的时候报错:Error occurred when finalizing GeneratorDataset iterator: Failed precondition: Python interpreter state is not initialized在网上查阅资料,大概有以下几种说法:TensorFlow 版本问题,2.3以上版本应该没这问题了tf.distribute + tf.keras产生的问题OOM了,将bs设置小一点几种据说可行的方法:
2021-11-16 20:48:57 8466
原创 Linux下 jupyter notebook 端口被占用解决办法
找到占用端口jupyter notebook list查询端口 PIDlsof -i :端口号杀死程序kill -9 PID
2021-09-01 21:12:19 1734
原创 pycharm远程调试、ubuntu界面在mac os可视化
本文将介绍两种实现pycharm远程调试的方法,方法一需要同步文件,方法二可以实现直接调试。方法一:利用SFTP这种方法网上谈到的人很多写的也很好,就不再赘述了,这里仅提供一个链接:Pycharm远程调试服务器代码。另外,建议将「自动同步」改成「手动同步」。实现方法是进入Tools -> Deployment -> Options选项进行如下设置:方法二:利用X11实现ubuntu中pycharm的可视化该方法的好处在于,直接在本机上就能打开服务器的Pycharm,这样就省去了本地文件
2021-04-18 12:58:00 385
原创 ubuntu界面在mac os可视化、显示ubuntu的GUI到本地
本文提供两种方法实现在MacOS上的Ubuntu GUI(图形界面)显示。方法一功能更加强大,但是界面相对卡顿一些,适合检查性操作,比如刚入门的小白还不太习惯通过命令终端去执行操作,就可以用这种方法作为辅助。方法二更加轻量,可以实现服务器端单个应用的GUI到主机上的映射(比如打开jupyter notebook、pycharm),对GUI界面操作时很流畅。方法一:借助VNC软件可以实现整个Ubuntu系统界面的显示,具体请参考:博客中VNC部分。方法二:借助X11(XQuartz)step1:配
2021-04-18 12:50:03 855
原创 cuda用不了、pycharm中某个环境的cuda用不了但jupyter notebook中可以
cuda用不了可能是因为:pytorch和cuda版本不对应nvidia驱动和cuda版本不对应另外,若pycharm中cuda用不了,而jupyter中可以,那很可能是因为你对应虚拟环境未安装jupyter,导致实际进的是base环境的jupyter(这点巨坑)。...
2021-03-29 18:05:42 2319
原创 argmax()、max()介绍
argmax()、max()的介绍在开始之前先明确“行轴”和“列轴”的方向如上图。对张量的操作import torcht = torch.tensor([[3,4,1,0],[12,1,2,3],[52,34,88,11]])t# 输出为:tensor([[ 3, 4, 1, 0], [12, 1, 2, 3], [52, 34, 88, 11]])-------------------------------------------------
2021-03-28 17:09:56 2070
原创 frp内网穿透(实现外网对内网服务器的访问)
为何需要随时随地访问服务器,而不受局域网的限制。准备工作1.自用机器A2.具有公网IP的机器B3.本地服务器C本文以阿里云作为公网IP机器介绍。(其他云服务器也可,最低配置就行。)frp内网穿透1.配置具有公网IP的机器B简单介绍下frp中几个文件:frpsfprs.inifrpcfrpc.ini前两个文件(s结尾代表server)分别是服务端程序和服务端配置文件,后两个文件(c结尾代表client)分别是客户端程序和客户端配置文件。来这里下载你适合你服务器系统的frp软件
2021-01-25 23:25:36 830
原创 Jupyter notebook插件nbextensions安装
建议安装流程在jupyter notebook开着的情况下:pip install jupyter_contrib_nbextensions # 下载插件python包jupyter contrib nbextension install --user # 下载javascript和css文件pip install jupyter_nbextensions_configurator # 用来管理插件的(不然就要自己终端通过命令启动对应插件)jupyter nbextensions_conf
2021-01-15 21:32:57 1242
原创 启发式算法(heuristic)
WHY:1.有时候最优解是难以找到,甚至是无法找到的,此时我们希望去找一个逼近最优解的解。2.有时非最优解也可接受。WHAT:我认为启发式算法称为「探索式算法」or「经验学习法」更加合适。有一些不错的说法:启发式一般又称人工智能算法或全局优化算法。启发式算法是指具有自学习功能,可利用部分信息对计算产生推理的算法。…ps:这部分可见:什么是启发式算法(heuristic algorithm)朗文对heuristic的解释是:The use of experience and pract
2020-12-29 20:06:20 7078
原创 Numpy广播与matmul()
广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。对于加减运算和矩阵乘法,广播法则略有不同?td广播在加减运算上的应用广播原则:如果两个数组的后缘维度(即:从末尾开始算起的维度)的轴长相符或其中一方的长度为1,则认为它们是广播兼容的,广播会在缺失和(或)长度为1的轴上进行。举几个例子:例1:数组(array)与标量数字(scalar)的广播例2:2个不同形状的数组这里a的shape是(4,3),b的sha.
2020-12-29 20:04:14 424
druid 和 druid-spring-boot-starter 1.1.13 版本和 1.2.8 版本的 jar 包
2023-06-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人