Saturday, August 28, 2021

V2EX - 技术

V2EX - 技术


麻烦大家帮忙看看简历,有什么需要修改不足的地方吗

Posted: 28 Aug 2021 03:58 AM PDT

查看简历点击这里: https://shimo.im/docs/XKq4j0goBzcjmoAN/

1 年多经验,学校双非,公司也一般,感觉学不到东西,想跳槽去个技术好一些的公司

之前发了个贴子,就两个大佬回了,麻烦请大家帮忙看看还有什么不足的地方吗

去互联网公司有希望吗,目前 14k,谈薪的时候可以要 20 以上吗

关于 Java 可能存在的 10 个误解(2021 版)

Posted: 28 Aug 2021 03:55 AM PDT

关于 Java 可能存在的 10 个误解( 2021 版)

1. Java 是编译型语言而不是解释型语言

在 JEP222 ( JShell,Java9 )和 JEP330 ( Java11 )实装后,Java 可以很方便地用 REPL 解释执行,也可以使用带 Shebang 的小脚本,如

#!/usr/bin/env java --source 11  public class Main {     public static void main(String[] args) {         System.out.println("Hello World!");     } } 

而对于现代的编程语言,关于编译执行和解释执行的分类已经变得越来越模糊了,大多数的编程语言都加上了 JIT,而传统的编译型语言也为语言加上了能够解释执行的"快捷方式"。


2. 如果在 Java 代码中使用var,Java 就变成动态语言了

var是一个方便使用的语法糖,编译器帮忙推导出了静态类型,不会导致 Java 变成动态语言。

值得关注的是,类型推导已经是现代编程语言的共同特性,很多静态类型的编程语言都已经装备了这个特性。


3. Java 的泛型是假泛型

为了兼容已有的代码,Java 实现了编译时泛型以及少量的运行时的泛型信息,或者说称之为擦除泛型。

Java 的泛型提高了程序的健壮性,但由于缺少一些特性也为人诟病,但称之为"假的泛型"是一种误解。事实上,越来越多的动态语言正在尝试增加"可擦除的类型系统"、类型注释( Type Hint ),用于提高程序的健壮性。

而 Java 的类型(泛型)系统已经被证明是不健全的( Unsound ),但由于 JVM 没有实现泛型,所以并没有因此影响 JVM 的可靠性。


4. Java 应用程序分发时必须携带 JVM,不能编译成原生系统支持的二进制程序

这并不是 Java 应用分发的唯一方式,无论是古老的 GCJ ( 1998 ),还是近几年流行的 GraalVM Native Image,都可以将 Java 代码编译成一个原生系统支持的二进制程序,这能显著提高程序的启动速度和分发效率。

另一个选择是 JEP392 ( Java16 )带来的 jpackage tool,它能够帮助生成对应操作系统的安装包,解决应用程序分发的最后一公里问题。


5. Java17 之后,就不能使用com.sun.*包里面的类了

大多数com.sun.*的包都是供 JDK 内部使用的,这些包在 JEP403 ( Java17 )后将无法再被外部的类使用,但仍然存在少部分模块的公共类是在包com.sun.*下,且可以被外部的类导入使用,只不过对它们的反射行为被禁止了。


6. Java 和 JavaScript 之间完全没关系

Java 和 JavaScript 名字很像,在历史和设计上也有一定的关系,两者使用了类似的语法,JavaScript 借鉴了 Java 少量 API 和编码风格,同时 JavaScript 在设计之初特意避开了设计class以免和 Java 相像。

Java 和 JavaScript 的商标都在甲骨文( Oracle )手中,所以如果使用 JavaScript 做宣传也可能被甲骨文法务找上门。

但除此之外,两者是两门相差很大的编程语言,它们有各自的工具链、应用领域、社区和演进路径。


7. 使用 Java 写网站要依赖 Tomcat 等 HTTP 库

JDK 从 1.6 开始提供 HTTP 模块com.sun.net.httpserver.HttpServer,使用起来也同其他编程语言类似。

在 JEP408 中,将提供一个简易的命令行"Simple Web Server",可以像 Python 那样python -m http.server一键启用一个 Web 服务器。

8. Java 垃圾回收时,会产生糟糕的 STW,影响应用的运行

低暂停时间和无暂停时间的的垃圾回收器已经被发明,如 OpenJDK 目前可以启用 ZGC 以降低 GC 的 STW 对应用的影响。


9. 编写 Java 程序往往需要编写大量的 XML

曾经是的,但是当前的 Java 社区倾向于使用 Java 语言或者 JVM 上的方言来书写配置,以取代过去的 XML 配置。


10. Android 平台实现了 Java 平台

事实上,Android 平台并没有实现 Java 平台必要的设施,而是通过特殊的手段编译了 Java 的字节码,所以并不符合 Java 程序"一次编写,到处运行"的口号,也不能使用 Powered by Java 作宣传。

smart-background 自动生成符号背景的 react 组件,让你不再为背景头疼

Posted: 28 Aug 2021 03:44 AM PDT

Smart Background

在开发过程中,我们经常会遇到使用背景的地方,比如登录页面,用户信息页面,封面图……

寻找契合业务主题的背景十分耗费精力,总觉得做的背景不合适,

如果直接用图片呢,逻辑是比较简单,但寻找到一张契合业务主题的图片也不是那么容易,

所以想到用符号生成幕布一样的背景,从这个出发点做了这个组件,

滚动的图片墙可能这个需求比较常见,用 SmartBackground 可以很快速的实现,

希望可以帮到您,别忘了 star 哟

npm version npm version npm version npm version npm version npm version

An React Component Can Automatically Generate The Background

一个快速生成元素背景的 react 组件

snapshot.png

Live demo / Home page

https://yuanguandong.github.io/smart-background/

Install

npm i smart-background -S 

How to use

import React from 'react'; import Background from 'smart-background'; import { FaLaugh } from 'react-icons/fa';  export default () => {   return (     <div style={styles.container}>       <Background underlayColor="#f00" animation={{ type: 'bottom', speed: 5 }}>         <div style={styles.content}>           <FaLaugh style={styles.icon} />           <h1 style={styles.text}>JUST DO IT</h1>         </div>       </Background>     </div>   ); };  const styles = {   container: { width: '100%', position: 'relative', height: 350 },   content: {     width: '100%',     height: '100%',     display: 'flex',     justifyContent: 'center',     alignItems: 'center',     flexDirection: 'column',   },   icon: { color: '#fff', fontSize: 120 },   text: { color: '#fff', fontSize: 36, fontWeight: 'bold' }, }; 

Props

property description type defaultValue required
symbols 元素 /字符 /符号集合 (string | ReactNode | Element)[ ] ['●'] false
random 符号是否随机生成位置和大小 { fontSizeRange: number[] } | undefined false
underlayColor 底衬颜色 string false
underlayImage 底衬图片 string false
symbolsStyle 符号样式 Object {color: '#000', opacity: '0.3'} false
rotate 符号旋转角度 number 0 false
symbolSize 符号大小 number 90 false
gap 符号间距 number 10 false
animation 滚动动画 {type: 'left' | 'right' | 'top' | 'bottom'; speed: number;} false
exact 精确模式 boolean false false

求大佬帮助, b 站加载视频,控制台出现⚠️SharedArrayBuffer will require cross-origin isolation as of M92

Posted: 27 Aug 2021 11:09 PM PDT

0.最近用 MacBook 刷 b 站发现一个奇怪的地方,控制台会有"⚠️SharedArrayBuffer will require cross-origin isolation as of M92"警告 1

1.控制台有此警告时,Chrome 看视频时右上角"多媒体"标志会消失,正常情况下观看视频时会显示此标志 2

2.删除下图中的数据中的"本地存储",再次加载视频时无警告,关闭视频再打开后会出现警告(即"本地数据"为空时无警告,一旦加载视频生成此"本地数据"时,再次播放其他视频就会出现警告)
3

查了一下是 Chrome 浏览器新特性引起的,以为大家都这样,但是用其他电脑发现没有此问题,只有我。我已经关闭所有插件、重置 Chrome 实验室功能尝试都无效

虽然看着没什么影响,观感上只是右上角一个小标志的区别,但不幸的是我是 HomePod 当音响用户,出现这个警告 HomePod 看 b 站会有严重的声音延迟(正常情况下不会延迟)

等大佬帮助。。。

一个新的 CPU 架构会对上层产生多大的影响?

Posted: 27 Aug 2021 08:01 PM PDT

现在都流行什么 AI 芯片,神经网络处理,或者新的架构比如 RiscV 等,这种新的 CPU 诞生,会产生什么样的影响呢?

软件层面我认为影响不大,怎么说呢,因为编译器和操作系统都适配好了。那么上层应用只要通过编译器重新编译打包一下就好了,源代码都不用改。
AI 芯片呢,可能会多加一些并行计算库的支持,应用层代码改动也不大。

倒是会对原有的硬件产业产生影响,比如接口重新设计,板卡要重新打造

请问如何做到每个用户一个独立的 raid1?

Posted: 27 Aug 2021 03:34 PM PDT

现在有几百个用户, 每个用户需要有自己独立的空间, 而且空间上建立在 2 块独立的硬盘(组成 raid1). 最终要的效果是一个用户要离开的时候, 他可以直接把他相关的 2 块硬盘拔掉带走, 这样他所有相关的数据都在上面.

现在大致想到的方案是:

  1. 用支持几百块硬盘的磁盘阵列组成几百个 raid1. 这种方案的问题是支持几百块硬盘的磁盘阵列硬件是有的, 但能不能弄出几百个 raid1 还不清楚, 因为一般磁盘阵列都是 raid10 这种, 在 raid1 的基础加 raid0, 弄出一个很大的空间. 而现在的需求不是弄出一个很大空间, 而是每个用户有自己的独立的 2 块硬盘, 他能使用的空间也就是一块硬盘的大小. 如果磁盘阵列支持弄出几百个 raid1, 如果挂载到系统上也是一个问题, 因为一般系统能挂载的分区数也就十几个.
  2. 使用 vmware 虚拟化和磁盘阵列配合的方式. 这种相当于每个用户建一个虚拟机,然后给虚拟机绑定固定的硬盘. 这个方案的问题和方案 1 的问题是一样的, 就是磁盘阵列支不支持这么干和 wmware 这种支不支持这么多硬盘.
  3. SAN. SAN 能不能做到每 2 个硬盘组成一个 raid1 这种,然后每个 raid1 有一个独立的访问方式?

前面的 raid1 只是举例, 实际的需求只是 2 块硬盘可以互相备份即可, 如果一个用户的某块硬盘坏了, 换掉坏的就可以了. 不考虑两块都坏这种情况. 这几百个用户的硬盘都是放在一个机房的, 所以希望能用尽量少的机柜去满足这些用户的需求.

请教 es7 中的排序规则问题

Posted: 27 Aug 2021 01:31 PM PDT

请问可以自定义某个字段的排序规则吗,例如按照 1 、0 、2,而不是升序或者降序,谢谢!

imageio 能否从视频中间某帧开始读视频(其它方案也行)

Posted: 27 Aug 2021 12:23 PM PDT

我的视频稍微有点大,我想同时从视频的不同位置开始读取,并行处理。
但是,目前只能循环 vid.get_data(i) 到需要的目标位置,如果直接给一个比较大的 i,
vid.get_data(i)就会返回全 0 的数据。

不知道有没有什么方法可以快速定位到视频中间的某些位置。

以下是一些信息:

In [2]: import imageio
In [3]: vid=imageio.get_reader('380670.avi','ffmpeg')
In [4]: vid.get_meta_data()
Out[4]:
{'plugin': 'ffmpeg',
'nframes': inf,
'ffmpeg_version': '4.2.2-static https://johnvansickle.com/ffmpeg/ built with gcc 8 (Debian 8.3.0-6)',
'codec': 'rawvideo,',
'pix_fmt': 'pal8',
'fps': 50.0,
'source_size': (832, 832),
'size': (832, 832),
'duration': 12032.6}

vscode 有已安装插件分组功能吗 强迫症想整理

Posted: 27 Aug 2021 12:06 PM PDT

安装一大堆插件 查看的时候乱 vscode 有已安装插件分组功能吗 强迫症想整理

想在 Json 请求中传单个原始值,应该怎么做?

Posted: 27 Aug 2021 11:22 AM PDT

据我所知,一个合法的 JSON 对象不仅可以是对象或数组,一些原始值也是可以的,比如字符串"foo"、数字3、布尔值true也应该都是合法的 JSON 值。

但是今天遇到了一个问题,我想设计一个接口来修改用户的头像。(头像 avatar 在数据库里也就是一个字符串)

想设计得尽量 RESTful 一点,用了 PUT 方法,请求路径大概是这样:

/api/users/{用户的 id}/avatar 

虽然只是一个字符串,但想和其它接口一样都接收 JSON,返回 JSON 。所以不希望用text/plain而是一样采用application/json的 MIME 类型。我想,既然一个字符串也是合法的 JSON,那应该也没问题,因此就在 axios 的 data 里传了一个字符串:

image-20210827203655179

但是发现它给我自己转换掉了,而且不是JSON.stringify那种转换。

我本以为请求体里会是"a single string",但结果居然是a single string

image-20210827203932188

这根本就不是合法的 JSON 啊。

虽然再包一层也能解决,但很不舒服。

后来查了一下,似乎是 JSON 的定义出了问题:

image-20210827205946716

于是我就想问下,大佬们有遇到过这个问题吗?怎么优雅地解决这个问题呢?

自建域名服务器,有些问题想咨询

Posted: 27 Aug 2021 10:51 AM PDT

我目前使用 ubuntu+bind 配置的权威 dns,下面是我的 db.example.com 文件,目前域名 example.com 解析正常,但我需要让所有域名只要使用 ns1.example.comns2.example.com 的都解析到 www.example2.COM ( CNAME ),求大神帮忙看看。

$TTL 86400 $ORIGIN example.com. @ IN SOA ns1.example.com. hostmaster.example.com. ( 202108252 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 86400 ) ; Negative Cache TTL

;Name Server IN NS ns1.example.com. IN NS ns2.example.com.

;A Records ns1 IN A 222.222.222.222 ns2 IN A 111.111.111.111

;Cname Records www IN CNAME www.example2.COM. www2 IN CNAME www.example2.COM.

请问各位这种情况应该如何拆分代码提交为多个 PR?

Posted: 27 Aug 2021 09:50 AM PDT

假设有 ABC 三个需求,这三个需求需要同一个人开发。

此时开发写好了 ABC 的代码,以 A->B->C 的顺序用 Git 提交至个人分支中。

但 review 代码时,三个需求一起 review 过于痛苦,我们希望有更细粒度的方式。

因此可以有两种提 PR 的方式:

方法一

从 master 分支拉出三个需求分支,提出三个 PR,目标分支都为 master ,代码提交分别是:

master   \ \ \    \ \ -> A (PR1: A..master)     \ --> B (PR2: B..master)      ---> C (PR3: C..master) 

方法二

从 master 分支只拉出一条分支,但是基于该个人分支再拉分支,最后提出三个 PR,但是目标分支各不一样,提交图如下:

master       \        -> A (PR1: A..master)            \             -> B (PR2: B..A)                 \                  -> C (PR3: C..B) 

请问各位哪种方法更好呢?

个人担忧:方法一可能会在合并时产生 conflict,方法二对合并顺序有依赖。

不听白不听的线上研讨会来了,教你 K8s 游戏架构搭建!

Posted: 27 Aug 2021 04:58 AM PDT

免费公开课程讲授 Kubernetes 搭建游戏架构实例,让你轻松掌握!

主办方:Cloud Ace 中国区

讲师:江文远

十多年中外 IT 企业(百度、CyberAgent )经验 Cloud Ace 深圳公司 CTO 谷歌云中国区唯一认证培训师 时间:9 月 18 日 下午 3:00-4:00

适合对象:CTO/CIO IT 总监 /经理 软件工程师 /运维工程师

报名还有机会获得价值 3000 人民币的谷歌云线上培训课程!

报名方式:点击下方链接报名 https://6664245444058.huodongxing.com/event/1611678618923

2021 了, Android 程序员的出路是怎么样的呢

Posted: 26 Aug 2021 05:59 AM PDT

2021 了,技术日新月异,频频忙于业务无法提升,比较迷茫于 android 前景和出路,有没有前辈大佬指点一下

No comments:

Post a Comment