Thursday, April 7, 2022

V2EX - 技术

V2EX - 技术


截至 .NET 6, C# 在后端开发领域的生态与 Java 还有哪些差距?

Posted: 07 Apr 2022 03:09 AM PDT

如题,这里的"生态差距"不包括岗位、薪酬、求职与招工难度等人力资源生态问题。

就我个人感觉来说,C# 在语法上确实要香的多,性能更好,而且 VM 也远不需要 Java 的那些黑魔法。

但是,总有人说 C# 的生态很不好,想知道到底二者之间有哪些差距?有哪些库或中间件是 Java 特供而 C# 没有或发展极不完善的呢?对于实际的后端开发会有多少影响?

以及,也常听说全球范围内的 C# 生态好一些,那么如果忽视掉这些 Java 非全球范围的大厂自研开源和中文社区特供的部分的话,C# 和 Java 在后端领域的差距又有多少呢?

( PS:这里讨论的 C# 特指 .NET 6, 不讨论 Mono 、.NET Framework 以及各 AOT ,也不讨论 IIS 及早已不存在了的 Windows/Linux 平台问题。)

请教下大佬定义错误信息结构,应该采用哪种方式

Posted: 07 Apr 2022 02:59 AM PDT

关于项目中的错误信息,最好采用哪种结构呢?目前我想到看到的大概是下面两种方案,想问下哪种方案好一点,有没有更好的方案,比如根本不用枚举。

  • 定义一个枚举:

    enum ERR { 	ERR_Success = 0, 	…… 	ERR_xxxxFailure = xxx, 	ERR_xxxxFailure = xxxx, }; 

    定义一个 dictionary:

    dictionary<int, string>{};  对应存入枚举对应的,报错详细信息。 
  • 有些人会将很多函数返回值,定义为 int 或者枚举类型 ERR

    int run() { 	…… 	return ERR_Success; }  最后在使用的时候 { 	if(run() != ERR_Success) 	{ 		…… 	} } 
  • 有些人会采取 setError 的方式,在其他地方调用 getError

    bool run() { 	…… 	return setError(ERR); }  bool setError(int value) { 	…… 	if(value != ERR_Success) 	{ 		return false; 	} 	return true; }  string getError() { 	…… 	return error; }   最后在使用的时候 { 	if(!run()) 	{ 		getError(); 		…… 	} } 

chrome F12 里的 400 报错怎么能拦截到

Posted: 07 Apr 2022 02:43 AM PDT

前端用 axios 发的请求如果参数不全后端返回 400 ,但是我在 axios 里 then 后 catch 了,能够 catch 到 status 400 ,但是 F12 里面还是有红色的,不好看

xhr.js?b50d:210          POST http://localhost:8080/api/comment/ 400 (Bad Request) 

即使加了拦截器也没起作用,这个能被拦到到吗?

当然在前端做参数校验有错就不提交,是可以避免后端返回 400 ,就想问下这个能避免吗

个人经历如何存储比较好呢?怎么设计数据表才便于交叉比对?

Posted: 07 Apr 2022 02:35 AM PDT

1982.09—1984.07 安徽省气象学校气象学专业学生

类似这样的数据如何存储呢

asyncio 中 loop.run_forever() 方法导致 100% CPU usage

Posted: 07 Apr 2022 02:31 AM PDT

python 版本:3.10.1 或 3.10.2
代码:

def main():     log_listener = setup_logging(log_filename)      e = asyncio.Event()     consumer = Consumer(e)      loop = asyncio.new_event_loop()     asyncio.set_event_loop(loop)     signals = (signal.SIGHUP, signal.SIGTERM, signal.SIGINT)     for sig in signals:         loop.add_signal_handler(             sig, lambda s=sig: asyncio.create_task(shutdown(s, loop, consumer))         )      tasks = consumer.run()     try:         for name, task in tasks.items():             loop.create_task(task, name=name)         loop.run_forever()     finally:         loop.close()         log_listener.stop() 

consumer.run() 方法会返回一个 Dict[str, Coroutine] 类型的字典。最初以为是自己的 coroutine 实现有问题导致 high CPU 。然后将 tasks 中的 coroutine 一个个移除,最后 tasks 返回空的情况下也是 100% CPU 。
用 cProfile 看了下:

   Ordered by: cumulative time    List reduced from 3038 to 10 due to restriction <10>     ncalls  tottime  percall  cumtime  percall filename:lineno(function)     423/1    0.005    0.000   44.862   44.862 {built-in method builtins.exec}         1    0.000    0.000   44.862   44.862 myscript.py:1(<module>)         1    0.000    0.000   44.219   44.219 myscript.py:54(main)         1    0.000    0.000   44.017   44.017 /home/xxx/.pyenv/versions/3.10.1/lib/python3.10/asyncio/base_events.py:582(run_forever)         3    0.000    0.000   44.016   14.672 /home/xxx/.pyenv/versions/3.10.1/lib/python3.10/asyncio/base_events.py:1806(_run_once)         3    0.000    0.000   43.983   14.661 /home/xxx/.pyenv/versions/3.10.1/lib/python3.10/selectors.py:452(select)         3   43.983   14.661   43.983   14.661 {method 'poll' of 'select.epoll' objects}     484/4    0.006    0.000    0.642    0.161 <frozen importlib._bootstrap>:1022(_find_and_load)     483/4    0.003    0.000    0.642    0.161 <frozen importlib._bootstrap>:987(_find_and_load_unlocked)     447/5    0.003    0.000    0.641    0.128 <frozen importlib._bootstrap>:664(_load_unlocked) 

有 v 友遇到类似情况的吗?还是说我的用法有问题。

求推荐 C# / .NET 相关进阶书籍

Posted: 07 Apr 2022 02:26 AM PDT

我目前的工作经常使用 C# 开发,但是半路出家,虽然代码写得溜,但也仅限于"哪里不会查哪里",没有系统性地学习过 C#。

请问有相关合适的进阶书籍吗?希望能深入理解 C# 或者 .NET 框架相关知识。

中英文均可。

各位大佬有没有推荐做笔记软件?

Posted: 07 Apr 2022 01:57 AM PDT

需要一个做笔记的软件,主要是记录面试、八股文相关的内容。

必须要有网络备份同步功能

问下各位大佬有没有推荐!

关于各种软件项目的一点体会

Posted: 07 Apr 2022 01:53 AM PDT

欢迎大家二次创作更高精度的版本。

Google voice 被回收 求个有美国电话的老哥帮忙找回

Posted: 07 Apr 2022 01:42 AM PDT

一直没看邮件。gv 被回收了。

怎么样系统性地学习数据结构与算法(和 ACM 有关的)?

Posted: 07 Apr 2022 01:32 AM PDT

如果只说数据结构和算法的话,肯定会有《算法导论》这个回答。

但是就算完全看完《算法导论》,很多 LeetCode 题目应该还是不会做吧?

比如说有些用到单调栈的数据结构来解题的,《算法导论》中有吗?

我确实不清楚,不然也不会问这个问题了,下同。

比如有些使用滑窗思想的(双指针、快慢指针),

比如求解 [最长子序列] ,将暴力 O(n^2) 解法,通过 Patient Sorting 算法,降为 O(nlogn),

等等等...

当然,从刷题可以逐步地接触到这些算法;

但是从我个人的角度触发,刷题接触算法太零散了,就算将使用相同的数据结构、算法、思路放到一起归类, 还是很零散,就感觉有些看到某个算法,你不知道这个算法和其它算法有什么"血源"关系。

因为,我感觉一个没学过的算法,不肯能是从石头里蹦出来的吧?

重归和某些其它算法有一些什么逻辑关系。

所以,我的意思就是,基于类似这中逻辑关系脉络,来系统性地学习数据结构与算法,有什么资料、途径和方法吗?

有那些好用的靠近上游的 Linux 发行版

Posted: 07 Apr 2022 01:11 AM PDT

现在主要用的都是 rhel 或 debian 这些非常稳定但是软件非常老的 distro. 软件包版本太老受不了 蛮久之前用过 ubuntu ,更新经常崩,自此就很久没用过靠近上游的发行版了 主要在家用台式机上使用

软件包最好相对比较新,但也需要稳定,不要三天两头出问题,系统挂个一两次也挺费时间的

腾讯轻量云是不能 SMTP 发邮件吗?

Posted: 07 Apr 2022 12:47 AM PDT

SMTP.qq.com 465 端口,昨天测试可以,今天测试就不行了。

PVE 可以直通硬盘并且引导硬盘里的原 windows 系统吗?就像 Parallels Desktop 那样

Posted: 07 Apr 2022 12:42 AM PDT

deskmini x300 + amd 4650g + nvme * 2

其中

  • nvme0 直接安装的 windows 11 (非虚拟化)
  • nvme1 安装了 pve 7.1-7

问题:

  1. 怎么直通 nvme 硬盘?我看了 https://pve.proxmox.com/wiki/Passthrough_Physical_Disk_to_Virtual_Machine_(VM) 但是没有提到 nvme
  2. 能不能实现 /怎么实现虚拟机启动物理硬盘 nvme0 上的 windows ?

一段 PHP 代码求助,谢谢大家! IP 段转 CIDR 代码 ,重点支持 ipv6

Posted: 07 Apr 2022 12:37 AM PDT

在 goole 和 github 上搜索 IP 段转 cidr ,整整找了两天都没有发现支持 ipv6 段转 cidr 的 PHP 版本代码。无奈只能找个 ipv4 的版本作参考模仿着实现支持 ipv6 ,但似乎行不通(经调试发现"$startaddr & $mask"与运算有问题,已在代码块标注),路过的大佬麻烦帮忙指点下


github 上 ipv4 版本

     /**     * ip 段转 cidr (仅支持 ipv4 )     * @param $startip IP 起始地址     * @param $endip IP 结束地址     * @return array 返回 cidr 数组     */     function ipv4_range_to_cidr($startip, $endip)     {         $cidr2mask = [             0x00000000, 0x80000000, 0xC0000000,             0xE0000000, 0xF0000000, 0xF8000000,             0xFC000000, 0xFE000000, 0xFF000000,             0xFF800000, 0xFFC00000, 0xFFE00000,             0xFFF00000, 0xFFF80000, 0xFFFC0000,             0xFFFE0000, 0xFFFF0000, 0xFFFF8000,             0xFFFFC000, 0xFFFFE000, 0xFFFFF000,             0xFFFFF800, 0xFFFFFC00, 0xFFFFFE00,             0xFFFFFF00, 0xFFFFFF80, 0xFFFFFFC0,             0xFFFFFFE0, 0xFFFFFFF0, 0xFFFFFFF8,             0xFFFFFFFC, 0xFFFFFFFE, 0xFFFFFFFF          ];          $startaddr = ip2long($startip);         $endaddr = ip2long($endip);          $cidrlist = array();         while ($endaddr >= $startaddr) {             $maxsize = 32;             while ($maxsize > 0) {                 $mask = $cidr2mask[$maxsize - 1];                 $maskedbase = $startaddr & $mask;                 if ($maskedbase != $startaddr) {                     break;                 }                 $maxsize -=1;             }             $x = log($endaddr - $startaddr + 1) / log(2);             $maxdiff = 32 - floor($x);             $new_maxsize = $maxsize < $maxdiff ? $maxdiff : $maxsize;             $cidrlist[] = long2ip($startaddr) . "/" . $new_maxsize;             $startaddr += pow(2, (32 - $new_maxsize));         }         return $cidrlist;     }  

模仿写的 ipv6 版本

     /**     * ip 段转 cidr (仅支持 ipv6 )     * @param $startip IP 起始地址     * @param $endip IP 结束地址     * @return array 返回 cidr 数组     */     function ipv6_range_to_cidr($startip, $endip) {         $max = ip2long6('FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF');         $cidr2mask = [];         $count = 0;         while(bccomp($max, "0") !== -1) {             $cidr2mask[] = $max;             $e = bcpow(2, $count);             $max = bcsub($max, $e);             $count++;         }         $cidr2mask = array_reverse($cidr2mask);          $startaddr = ip2long6($startip);         $endaddr = ip2long6($endip);          $cidrlist = array();         while (bccomp($endaddr, $startaddr) !== -1) {             $maxsize = 128;             while ($maxsize > 0) {                 $mask = $cidr2mask[$maxsize - 1];                 $maskedbase = $startaddr & $mask; //与运算数据溢出?求路过朋友帮忙指点下                 if ($maskedbase != $startaddr) {                     break;                 }                 $maxsize -=1;             }             $x = log(bcadd(bcsub($endaddr, $startaddr), "1")) / log(2);             $maxdiff = 128 - floor($x);             $new_maxsize = $maxsize < $maxdiff ? $maxdiff : $maxsize;             $cidrlist[] = long2ip6($startaddr) . "/" . $new_maxsize;             $startaddr = bcadd($startaddr, bcpow(2, (128 - $new_maxsize)));         }         return $cidrlist;     }      /**     * 整数转换为 IPV6 地址     * @param $ipv6long     * @return string     */     function long2ip6($ipv6long)     {          $bin = gmp_strval(gmp_init($ipv6long, 10), 2);         if (strlen($bin) < 128) {             $pad = 128 - strlen($bin);             for ($i = 1; $i <= $pad; $i++) {                 $bin = "0" . $bin;             }         }         $bits = 0;         $ipv6 = '';         while ($bits <= 7) {             $bin_part = substr($bin, ($bits * 16), 16);             $ipv6 .= dechex(bindec($bin_part)) . ":";             $bits++;         }         // compress         return inet_ntop(inet_pton(substr($ipv6, 0, -1)));     }      /**     * IPV6 地址转换为整数     * @param $ipv6     * @return string     */     function ip2long6($ipv6)     {         $ip_n = inet_pton($ipv6);         $bits = 15; // 16 x 8 bit = 128bit         $ipv6long = '';         while ($bits >= 0) {             $bin = sprintf("%08b", (ord($ip_n[$bits])));             $ipv6long = $bin . $ipv6long;             $bits--;         }         return gmp_strval(gmp_init($ipv6long, 2), 10);     } 

求推薦 android 電池電量小部件 widget

Posted: 07 Apr 2022 12:26 AM PDT

老人家說看不清頂部狀態欄的電量狀態,太小看不清楚,

大家有在用哪個電量小部件 widget ?

O'Reilly 的 ACM 会员授权将于 2022 年 7 月 1 日到期

Posted: 06 Apr 2022 11:56 PM PDT

今天收到一封邮件。

As of July 1, 2022, you will no longer have to access the O'Reilly Learning platform as a benefit of your ACM membership. Despite our best efforts, O'Reilly Media is unwilling to continue to license their content to ACM for members. Please finish your reading/training by 11:59 PM ET on June 30, 2022. If you wish to continue accessing O'Reilly Learning past this date, you will have to contact O'Reilly and purchase a license directly.

Python 2.7 在 PyCharm 怎样支持指定变量类型

Posted: 06 Apr 2022 11:21 PM PDT

有的时候,函数返回的对象,在 PyCharm 中,类型都是未知的。

比如返回一个对象 obj ,输入 obj. 没有任何方法或成员提示。这种问题应该如何解决,如何显示地指定函数的返回对象类型,让 PyCharm 能够提示其中的成员?

顺便求问,前端要的数据都是驼峰的,但是 Flask 返回的属性都是下划线的,如何优雅地解决这个问题?

哪里能看别人整理的 VSCode 强大插件?

Posted: 06 Apr 2022 10:47 PM PDT

要不是闲着无聊打开 bilibili ,我都不知道copilot插件,这个补全功能很无敌,似乎只支持 Python 、JavaScript 、TypeScript 、Ruby 和 Go

https://www.bilibili.com/video/BV1ii4y1S7D3?share_source=copy_web

有啥好的网站、论坛、私人交流群等等可以看别人整理的高实用性插件?

请问 WordPress 反代有没有什么坑?

Posted: 06 Apr 2022 10:44 PM PDT

由于 VPS 网络太差(主机 A ),想买个低配网络好的在前面设置一层代理(主机 B ),流程如下,不知这样是否可行?

访客 -> 主机 B (仅运行 Nginx 反代服务) -> 主机 A (基于 LNMP 环境运行的 WordPress 站点)

有配置过的大佬可以分享下经验吗?这样配置后,注册 /登录、登录状态保持、WP 后台设置、发布文章之类的有没有什么坑?也就是与直接访问源站有没有什么不便的地方?

求大家推荐个 springboot 的入门开源项目吧 halo 的博客太难了。

Posted: 06 Apr 2022 08:36 PM PDT

新手在看网上视频学习 springboot ,如今视频看完了,也跟着做了简单的 restful api ,想更深入的学习下实战的代码。 看了之前的帖子有人推荐 halo 的博客,看了源码觉得这个太复杂了,甚至目录的结构复杂程度,都和我在视频学习的不在一个等级。

问如何保持热情

Posted: 06 Apr 2022 07:43 PM PDT

感觉工作越久越缺少热情,同时也缺少那份学习的的激情,总觉得三天打鱼两天晒网。感觉自己好失败啊

平时前端面试一些题目

Posted: 06 Apr 2022 06:49 PM PDT

小厂招人难,烦人,这几年招人都没有断过。
不像那些名声在外的厂,给得起钱请得起大神。


目标招中级的前端,不知道以下几道题算不算超纲,目标是 1-3 年经验的前端:

一面主要问题:
1 ,设置 cookies 的参数。
2 ,正则里面的小括号代表什么,贪婪非贪婪是什么。
3 ,箭头函数特性是啥,使用了 call,apply,bind 运行会怎么样,this 变成什么,为什么。
4 ,树,深度遍历和广度遍历是什么思想,怎么实现这思想。
5 ,array 的 sort 的参数中 a,b 分别是啥。然后一个班的学生进行排队。条件一:按照身高从低到高排序。条件二:同样身高的情况下,女生排前。

其他基础问题(例如 display 的合法值是什么)太基础,不写出来。


二面主要问题:
1 ,从产品,设计,测试,用户这几个角度考虑,设计个登录功能。
然后和后端(我临时假装后端)商量怎么做,需要什么样的 api 。
2 ,你觉得应该怎么做 省->市->区 这种级联的数据源怎么组装,api 要怎么样给。


一面考得的是基础,还有就是指点后领悟解决的问题。(不希望回:这个不知道。)

二面考的是前端的素养,作为一个前端,肯定得关注平时的功能,而不是只是为了切图而切图。而且还最少知道后端大概返回什么样的结构,为什么这样返回。

希望有正在找工作的前端,考虑考虑我厂。

公司环境有 ip 白名单,居家办公时如何固定 ip,避免频繁麻烦运维人员添加 ip

Posted: 06 Apr 2022 06:20 PM PDT

或者有没有类似的服务,让我以同一个 ip 访问外部

Linux c 程序性能分析问题,有大佬能解释一下为何这段代码在 3700x 上很慢,而在 5600x 上很快吗?

Posted: 06 Apr 2022 03:04 PM PDT

// cpu-test.c #include <math.h>  int main(int argc, char *argv[]) { 	unsigned long long c; 	unsigned long long l; 	double t;  	for (c = 3; c < 1000000; c++) { 		t = sqrt((double) c); 		for (l = 2; l <= t; l++) 			if (c % l == 0) 				break; 	}  	return 0; }  

这段代码取自 sysbench ,略有删减,原函数是:

https://github.com/akopytov/sysbench/blob/master/src/tests/cpu/sb_cpu.c 的 cpu_execute_event 函数。

使用"perf stat ./cpu-test"在 3700x 上得到的 IPC 是 0.83 ,而在 5600X 上得到的是 2.23 。

Java 如何通过反代发 Http 请求给 Steam?

Posted: 06 Apr 2022 02:32 PM PDT

小弟做了 Steam 的桌面小应用。
程序通过梯子能连上 Steam ,但有些用户没有梯子所以不方便。
有一个 Steam302 的程序可以通过反代,浏览器能连上 Steam ,但是应用不行。

所以问题是:
怎么应用通过 Steam302 的反代连上 Steam 。
谢谢大哥们。

Java 如何监测静态变量值的变化?

Posted: 06 Apr 2022 01:40 PM PDT

维护一个老系统,有个 Config 类,其中有个静态变量 DEBUG ,默认值为 0 ,定义如下:

public static int DEBUG; 

目前正式环境这个值在某些情况下会被修改成 1 ,搜了下系统中代码调用,没发现可疑的重新赋值代码,想请教下大家,如何在不修改现有代码,不增加 setter 方法的情况下监控这个变量值,当值变化时触发一个回调,打印代码执行路径?

看书看迷糊了 求解答

Posted: 06 Apr 2022 01:30 PM PDT

在看《 JavaScript 高级程序设计(第 4 版)》第 3 章第 3 节变量 看迷糊了

  1. var 声明作用域 关键的问题在于,使用 var 操作符定义的变量会成为包含它的函数的局部变量。比如,使用 var 在一个函数内部定义一个变量,就意味着该变量将在函数退出时被销毁:
function test() {   var message = "hi"; // 局部变量 }  test();  console.log(message); // 出错! } 

下面这个代码为什么没有报错啊

if (true) {   var name = 'Matt';   console.log(name); // Matt  }  console.log(name); // Matt  

这个 name 变量 怎么变成全局变量了

验证短信码被盗刷怎么办

Posted: 06 Apr 2022 01:19 PM PDT

1.限制了一个号码一分钟之内只能发一次 2.一个号码一个小时最多 6 次 3.一个 ip 一天最多 10 次 4.阿里云的滑块验证 以上的这些验证都是生效的,但还是被刷了上万条,都是换不同号码,号码前面部分是固定的,后面几位数随机的,ip 也是换着来的,有成百上千个 ip ,阿里云的滑块验证也通过了,用机器是怎么滑动那个滑块的啊,一脸懵逼。请问这种情况该怎么防啊

ACM 会员将不再提供 O'Reilly 在线图书馆服务

Posted: 06 Apr 2022 12:47 PM PDT

As of July 1, 2022, you will no longer have to access the O'Reilly Learning platform as a benefit of your ACM membership. Despite our best efforts, O'Reilly Media is unwilling to continue to license their content to ACM for members. Please finish your reading/training by 11:59 PM ET on June 30, 2022. If you wish to continue accessing O'Reilly Learning past this date, you will have to contact O'Reilly and purchase a license directly.

We regret that O'Reilly is not willing to continue providing this service to ACM Members and hope that you will continue to enjoy other benefits of ACM membership, such as our Skillsoft collection (with thousands of online books and courses from publishers such as Manning Publications and No Starch Press), as well as ACM TechTalks, the ACM ByteCast series, and more. All of these can be found in the ACM Learning Center.

ACM will continue to explore new partnerships to deliver additional professional development benefits and other opportunities for lifelong learning.

Sincerely, ACM Member Services

.map(window.open) 和 .map((one)=>window.open(one)) 的区别是啥?

Posted: 06 Apr 2022 11:29 AM PDT

这两行代码的执行结果咋不一样(一个打开新窗口,一个在当前窗口打开新标签页)? this 不同?

`https://baidu.com https://163.com`.split(/\r|\n/ig).map(window.open)   `https://baidu.com https://163.com`.split(/\r|\n/ig).map((one)=>window.open(one)) 

作为大龄程序员,有考虑未来往区块链转吗?

Posted: 06 Apr 2022 11:26 AM PDT

发现这种新技术,不限年龄,人才非常稀缺,团队也正在考虑招揽人才(几位大厂同事在副业搞搞游戏元宇宙) 大家讨论一下,新的支付方式,新的信息机制,需要什么样的人才呢?

微服务架构下大家都在实践 BFF,你的 BFF 都有哪些问题?

Posted: 06 Apr 2022 10:53 AM PDT

最近基于自己在项目上实践 BFF 后进行治理的一些相关经验,整理了一篇文章:BFF 治理与优化实践

不知道大家是否在实践 BFF 过程中也遇到过很多问题,欢迎留言讨论

大数据当下都流行哪些技术栈?

Posted: 06 Apr 2022 10:39 AM PDT

在公司干了三年多的大数据,平时工作中接触到的基本就 hadoop 、spark 、hive 等框架,工作内容基本是 spark 离线处理,现在想去外面看看新的工作,但是由于自己平时没好好学习更新自己技术,所以请教各位 v 站老哥,我该学点什么新的大数据技术栈?

🐶 新建了一个自学 CS 的 Discord 群组

Posted: 06 Apr 2022 10:04 AM PDT

链接: https://discord.gg/9kefsnsx4D

背景

最近小两年来,我默默看完了十几本书,感觉有莫大的收获,不过也感受到坚持把书看书非常艰难,有很多因为各种原因看不懂的地方。如果对应每本书都能有个专门讨论的地方,那可能会好很多。 看到有多个人在看同一本书,也能有一些抱团取暖的感觉?:)

为什么不是 QQ 、微信、Telegram 、Matrix 等等?

前面三个都没有 Group Channel 的形式,像 Telegram 可能只能加入一个群,在这个群讨论特定的问题。Discord 就不一样了~我们可以建立多个 Channel ,每个 Channel 只讨论一个话题。 相信每个人不是看完一本书就结束了,我们还想再来一本,那这个 Discord 就很合适了~

Code of Conduct

  • 每个 Channel 下面仅讨论这个书籍 /课程相关的内容
  • 不要广告,不要 Off Topic
  • 增加 Channel 可以在 general 中讨论

书籍 /课程范围

满足以下几个条件:

  • 仅考虑增加 https://teachyourselfcs.com/ 里面提到的
  • 每个 Channel 总得有那么几个人把对应的书籍 /课程学完了,至少讨论起来可能顺利一些

已有 Channel

  • Computer Systems: A Programmer's Perspective
  • Crafting Interpreters

直接有上面两个 Channel 是因为这个 teachyourselfcs 涉及到书籍我只看完了这两本,其他都在范围之外。

增加 teachyourselfcs 之外的内容?暂时可能不会有吧,teachyourselfcs 里面的内容已经够看一阵子的。

补充

现在有什么人入住吗? 没有,只有我一个,而且我也不能保证在遇到 CSAPP 和 Crafting Interpreters 相关问题,我能有比较好的理解,但我会尽力啦(欢迎各位看完的大佬做讲解呀)

没有什么营养的 Code of Conduct 能有啥用? 和 Channel 无关内容会被删除,见谅。

大佬们都是用什么软件找工作的?(程序员)

Posted: 06 Apr 2022 09:59 AM PDT

如题,这两周在杭州找工作,boss 直聘投了大量简历,回应寥寥,一共面了 4 家。 上周面完等到今天,只有一家公司的 HR 今天反馈跟我说初试技术面没什么问题,但在最终面的时候一个领导觉得我两年换了两份工作,不太稳定,他们公司是传统制造业那种需要稳定的人,于是 GG 。(头都大了,两年两份工作,我这跳槽频率很大吗?) 求教各位老哥怎么找工作的?

有没有办法在不拔手机卡的情况下照样上 tiktok?

Posted: 06 Apr 2022 09:56 AM PDT

因为 Tik Tok 会识别国内的手机卡嘛。所以有没有办法通过软件的方式屏蔽掉 Tik Tok 的识别?

求问。

发现一些很值得感叹的东西

Posted: 06 Apr 2022 09:45 AM PDT

说说我的背景:
大学 CS 专业,但是自身原因,什么都没学好,实习后去培训前端然后上岗

我这段时间在学习后端开发,遇到一些很初级的 mysql 问题,于是在 V 站提问
其实我事先是在 Google 上搜索过的,大部分文章给出的方案都是使用中间件
直接使用数据库解决问题的文章比较少,加上我基础的确很差,就闹了笑话

因为我以前看过很多文章,包括小米,天猫,12306 这种史诗级高并发的项目
他们会使用很多中间件去解决数据库的性能瓶颈
我就自作聪明的以为小项目也需要这样的中间件
然后闹了笑话

其实 MySQL 和其他数据库自身很强大,他们在发展的历程几十年中遇到的问题比我们任何一个人一辈子遇到的问题都要多,他们也有很优雅的方式去解决这些问题

而我却忽略了

希望自己今后能脚踏实地好好学习,不要南辕北辙,贻笑大方

阿里 Midway 解决了什么问题?

Posted: 06 Apr 2022 09:34 AM PDT

前段时间发现了阿里的 Midway 框架,当时看的云里雾里,感觉他好像就是一个服务端框架罢了,类似于 laravel 、spring

官网介绍说这是一个 serverless 框架,可以直接部署在 serverless ,无惧被云服务商绑定,但是像 laravel 、spring 等不也可以直接部署吗,也不怕被服务商绑定啊

前天又看到了 Taobao UED 的 《前后端分离的思考与实践》 https://www.w3cschool.cn/jdgasx/,文章中说,这样设计框架的目的,好像就是为了把 controller 的责任移到了前端,前端去负责控制器、视图,后端负责数据和业务处理,说好处是可以职责划分。是在本身的业务层中间又插一层 node ,职责划分更明确了,但是前后端的沟通成本 /开发成本会不会更高?

发现这个框架也可以直接操作数据库,也可以用 Midway Hooks 的方式结合 vue 和 react ,目前感觉的好处就是,写页面不用在绑定接口了,中间的数据传递都让框架本身处理了。但是这样搞,和传统 laravel 、springMVC 不也一样吗~只不过一个服务端渲染,一个本地渲染

目前我能想到的更深一步的好处是,可以基于 react 的函数式编程,实现千人千面的效果。但是这样对 app 、pc 的应用好像没有效果。而且徒增一层 node ,感觉深知有点多余呢……

Controller 和 Service 中注入 HttpServletResponse 有什么差异吗

Posted: 06 Apr 2022 09:18 AM PDT

项目里需要导出一个文件。一开始我使用的在 Service 的实现类里面注入 response

//serviceImpl  //服务类注入 @Autowired private HttpServletResponse response;   public void export(params){     // ... }  

然后就很常规的打开流,获取文件,写入,关闭 但是无法通过项目的网关鉴权,报了一个 null 错误。

但是如果是在 controller 里面注入,再直接传给 Service ,就可以通过鉴权。 就像这样。

//Controller 注入  @Autowired private HttpServletResponse response;  public void export(params){  	//传给 service      	exportSevice.export(params, response); }  

请问这两种方式注入的差别在哪?

No comments:

Post a Comment