木偶's Blog

如果发现能力无法支撑自己的野心,那就静下心来学习吧

1.1 问题描述

docker 导入镜像 tar 包报错,报错信息如下:

image-20221201153103996

1.2 解决方案

通过报错信息可以看出,是导入的时候,docker 对 SHA256 哈希码进行校验,没有校验通过,说明这个镜像 tar 包被修改过。为了验证,我们可以利用 MD5 对镜像进行比对

  1. 在通过 docker save 镜像名称/id -o demo.tar 命令导出镜像 tar 包后,计算出 tar 包的 MD5 值

    1
    md5sum demo.tar  # md5sum 是 Linux 自带的命令
  2. 将 demo.tar 从 Linux 下载下来后,再次对 demo.tar 计算 MD5 值

    1
    certutil -hashfile demo.tar MD5  # certutil 是 Windows 自带的程序

计算后,对比上面两步的 MD5 值,如果不一致,说明从 Linux 将 demo.tar 包下载下来时,可能因为网络等原因,导致数据发生了改变,从而产生这个错误。只需要重新从 Linux 下载 demo.tar 即可,下载后再次计算 MD5 进行对比,直到一致。

Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass

问题描述

在使用 Spring 集成的 cglib 手动对某个类进行代理增强时报了以下错误:

Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not “opens java.lang” to unnamed module @5c29bfd

我的代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class CglibProxyForMultiInterfacesTest {
interface Service1 {
void m1();
}

interface Service2 {
void m2();
}

public static void main(String[] args) {
Enhancer enhancer = new Enhancer();
enhancer.setInterfaces(new Class[]{Service1.class, Service2.class});
enhancer.setCallback(new MethodInterceptor() {
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.println("方法:" + method.getName());
return null;
}
});

Object proxy = enhancer.create();
if (proxy instanceof Service1) {
((Service1) proxy).m1();
}
if (proxy instanceof Service2) {
((Service2) proxy).m2();
}
System.out.println(proxy.getClass());
for (Class<?> anInterface : proxy.getClass().getInterfaces()) {
System.out.println(anInterface);
}
}
}

解决方案

貌似是高版本的 JDK 禁用了反射权限,需要添加 JVM 参数去开启

1
--add-opens java.base/java.lang=ALL-UNNAMED  

image-20221128141538748

问题描述

前端向后端发送 POST 请求,请求数据为 JSON 格式,其中有个字段为日期,后端 SpringBoot 通过 Date 类型去接收入参,结果发现比当前时间少了 8 个小时。

初步分析是时区导致的。

解决方案

第一步:

1
2
3
4
5
spring:
jackson:
// 注意格式不要写错了,例如 HH 不要写出 hh,否则可能会有其他问题
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8

第二步:时区用 Asia/Shanghai 或者 GMT%2B8

1
2
3
4
5
url: jdbc:mysql://127.0.0.1:3306/aaaaa?
useUnicode=true&
characterEncoding=utf-8&
useSSL=true&
serverTimezone=Asia/Shanghai

应届毕业生求职就业时的相关注意事项

本文主要是针对第一次找工作的应届毕业生。时间点在于面试后拿到 offer 一直到入职时的劳动合同签订。

企业逼签三方如何考虑

毕业生在秋招求职时,大概率会遇到这样的情况,拿到了几个公司的 offer,但还没签三方,公司那边催签三方,但是自己又想在看看其他公司。面对这种情况,这里有几个点可以综合考虑一下

公司是否靠谱

一般通过校招招聘新人的企业都是靠谱,但是拿到 offer 之后还是要第一时间了解清楚该公司的现状、其他人对该公司的评价;常用的渠道有天眼查企查查看准网offershow等等

岗位情况

如果公司靠谱,再考虑你要签约的岗位的发展前景如何,跟你的职业规划方向是否匹配

薪资情况

违约会怎样?

很多企业会规定违约金,一般情况是 3-8k,具体以公司的规定为准。如果违约了,是需要支付违约金的。此外,多数学校只允许学生毁约一次(签三方不止关系你和公司,还有学校)。所以需要跟就就业指导老师确认一下,如果毁约了,是否会给新的三方文件。

确定好了之后,如果想春招的时候再尝试一下,可以先签一个保底。

签三方前须知

户口

户口的重要性

户口是否重要,有什么用,网上的讨论很多。只能说,你觉得它重要,它就重要,你觉得不重要,它就不重要。个人觉得,如果想要在一个城市长久稳定地发展,那它就很重要。至于户口的实际作用,不同的城市不同。

以北京为例

如果没有北京户口,当你想跳槽时,会发现能选择的单位很有限,因为很多单位招人时,往往都要求北京生源、北京户口,没有北京户口,也无法参加北京市公务员考试,这是户口带给我们的直接影响。

所以,如果不打算在某一个城市长待或者出国,那么户口可能就不重要了。

入户

入户有些公司会帮忙解决,有些则不会,一般通过 HR 或者宣讲会可获知。而且是否需要重视这个问题主要看城市,如果是在广深地区基本不用怎么操心,有公司解决自然不用说。如果没有也没关系,可以自己牵,只是需要多跑几趟派出所。

如果自己迁,需要注意的是,毕业时,保管好毕业报告证,并将自己档案挂在人才市场,再去迁。毕业两年内,都可以以人才引进的方式入户。其实如果是在广深,这些都是不需要怎么担心的,到时候自然水到渠成。

如果是在北京上海,就需要注意了。

北京上海对双外卡得比较严,所以公司能否给你解决户口是非常重要的。一般来说大多数国企、事业单位、研究所、公务员都是有能力解决的,但除此之外的,则需要询问清楚。对于大多数人来说,想要获得北京、上海户口,基本上就只有毕业这一次机会,所以请尽量想清楚。

特别说明的是,对于那些只是承诺“尽力解决户口”、“不保证解决户口”的公司,跟你签了三方,实际上你就要承担一定风险。一旦最后没给你落下,那么算单位违约,三方必然要退给你,你再回学校办改派。大多数情况下,户口和档案会被打回原籍,因为那时再签约别的单位已经不可能了。

整体薪资

薪资

纯小白如何自学编程

看似一个简单的问题但包藏着很多信息,绝对不是简单几句话就能说清楚。首先程序员也分为很多种。例如从大的方向来说,有后端、web,移动端、嵌入式等等。再从编程语言方向细分,如后端程序员又分为 Java、PHP、.NET 等等,所以无论是自学还是报班都要先搞清楚你要学习或者你感兴趣的方向,其次再确定编程语言,之后再开始学习。这个顺序不搞清楚,自学起来就会稀里糊涂,越学越累,走很多弯路。

即使我这么描述了一圈,还是有一些读者接着问,“后端程序员又是个啥玩意?”,每次听到这类问题我都感觉很无语,不知道怎么解释。但闲下来后再想想,这些茫然我也是经历过,被嘲笑过,被无语过,毕竟我也算是 0 基础自学过来的,所以,今天趁着周末,我会尽可能的在自己的知识范围内为大家梳理一下这些问题。

首先就从大家经常接触的前端开始。这里的前端并不是单单指 web,其实应该叫终端。再通俗点说可以理解为给用户使用的产品。你打开的一个网页、一个 App、或者 PC 端的一个软件,都可以理解为前端,而这些产品需要程序员用不同的编程语言开发。这里先给大家大致梳理一下关于前端的一下东西。

image-20210904124356657

这图应该还算清晰吧,假如你想学习 Android 开发,那首先学习的编程语言就应该是 Java 或者 Kotlin。当然这张图还是非常笼统的,只不过是让大家先有个简单的认识,毕竟是给小白写的不能太复杂。前端的东西相对还是很好理解的,毕竟看得见摸得着。

那后端又是啥玩意呢?可以简单理解为运行在远程服务器上的代码程序,主要是为前端提供数据。例如网站上展示的文字图片;用户的登录及用户信息的存储等,都是有后端程序完成的。而一个最基本的后端也至少包含两部分:处理程序和数据库。能够开发后端程序的技术也是有很多,不同的技术也使用不用的编程语言。大概如下图。

image-20210904124442490

再强调一下,此图只是一个最基本的后端,而后端范畴远不止于此。这里就不扩展开来讲了。很多东西都是在学习的过程中慢慢理解的。

那么前后端是如何通信的呢。那就不得不说到 HTTP 请求了。

image-20210904124507450

至此,别说是小白了,就算是个猴子也应该对前后端/对自学编程有初步的认识了吧!(开个玩笑)

那么肯定又有读者会纠结:到底是学习前端还是后端呢?哪个简单?哪个工资高?只能说因人而异吧。作为初学者也别太纠结,都学就是了,先找找感觉,后面再选择一个技术栈深造!后端的程序员多少要懂点前端,而前端程序员大概率都会点后端技术。

本地计算机同时起了 前端 和 后端 项目,想要进行联调。

  • 前端项目为 vue 3.0,端口为 5173
  • 后端项目为 Django,端口为 8000

此时出现了『跨域』问题,需要解决。

阅读全文 »

  1. van-cell 组件默认 title 和 value 宽度为各占 50%,如果想要增加 value 的宽度,可以给当前的组件的 van-cell__value 设置 min-width
  2. van-cell__value 本身是右对齐,但是换行之后,最后一行需要左对齐而不是右对齐,解决方法如下面的 span 样式
1
2
3
4
5
6
7
8
9
10
.address-cell {
.van-cell__value {
min-width: 70%;
span {
display: inline-block;
text-align: left;
word-break: break-all;
}
}
}

场景

当我点击 van-radio 时,我需要先判断当前点击的 van-radio 是否已经处于被选中的状态

解决方案

  1. 给 van-radio 设置 click 事件,并绑定事件处理函数
  2. 将当前 van-radio 的 name 值传递进去
  3. 在事件处理函数中判断:selectedRadioName === nameValue,如果相等,说明当前 van-radio 已经处于被选中状态了,否则,未选中。

跨平台

GoodSync

https://www.goodsync.com/

《GoodSync》是一款跨平台(Windows/Mac/Linux/NAS/iOS/Android)数据同步备份软件,可以自动将您的全部数据备份到多个目标位置,在需要的时候恢复数据轻松还原。当对某一处进行文件添加、更改或删除,则同步操作将对对应的 另一处的相关文件进行添加、更改和删除。相关文件将在两侧进行复制以确保两 处保持一致。

GoodSync 除了有同步功能外,同时提供分析、过滤,以及结果显 示等操作,以确保避免产生多余重复的文件并只对有需要的文件进行同步。借助专有文件传输协议 GoodSync Connect,可在您的所有设备(包括服务器、NAS 和手机)之间进行直接、快速、安全的 P2P 数据传输。

支持NAS设备(Western Digital、ASUSTOR、Synology、QNAP、Misc NAS)云存储(GoodSync储存、Google Drive、Dropbox、Azure、Office 365、OneDrive、私有云、SharePoint、Box.com、Backblaze、Amazon S3)、协议和文件系统(FTP、SFTP、WebDAV、GoodSync Connect (GSTP)、SMB共享、本地和远程网络)

FreeFileSync

最为推荐,简单易用免费,关键还好用!!!

https://freefilesync.org/

《FreeFileSync》是一款免费开源的文件同步软件,支持多平台(Windows/Mac/Linux)、支持 FTP / SFTP 文件传输协议、支持对比检测文件、支持批处理自动同步文件、支持多种同步方案、支持排除文件筛选器、支持 Unicode (中文文件名)、支持命令行调用、支持区分大小写的同步。

教程

https://www.bilibili.com/video/BV18f4y1t7jS/?spm_id_from=333.337.search-card.all.click&vd_source=cb771c0df4973d5667cfc24916380e4f

MacOS

MacOS 特有

Sync Folders Pro

https://apps.apple.com/us/app/sync-folders-pro/id522706442

https://www.greenworldsoft.com/

Windows

0%