很多东西那些『普通』的程序员不是不懂,是不知道为什么
就比如说 Android 开发入门里那个 anonymouse subclass
就比如说 Android 开发入门里那个 anonymouse subclass
new OnClickListener() { ... } 其实很多开发者甚至都不知道那创建了一个匿名子类,还有它的 final 访问问题很多人知道怎么用但是不知道,位运算和各种现在已经无效的『优化』也是Forwarded from duangsuse Throws
最后桌面布局(这次试用到此为止,非常成功,没有坑。可见各大 GNU/Linux 发行版对 Wacom 数位板的支持都很好,Krita 4.1.7.101 Qt 5 Core Tablet 在我这里有个 cache double-free 的问题,其他都好
Forwarded from duangsuse Throws
Forwarded from 羽毛的小白板
羽毛的小白板
A sorted set in Pg #Pg好玩
暂时没有时间学这些东西,大佬能不能在频道上讲解一下是怎么做的(刚刚 SQL 入门
顺路给大家科普一下 LWP 的问题(虽然现在对并发编程什么的我也不擅长,但如上所说我会学的,而且最终会变成我的技能 #parallelism
这个本来是我在某国产 JVM 书上并发实践上看到的,当然操作系统笔记上也有讲(肯定的,现在哪个操作系统不是多用户多任务... 况且,据说此书是他们应付考研用的,不过目前我不是很熟,其中很多问题 C++ 这样的并发编程程序员都能遇到,不只是操作系统层面的问题)
LWP 是 LightWeightProcess,轻量级进程的意思
对应的概念是 KLT(Kernel-Level Threads),系统级线程
In computer operating systems, a light-weight process (LWP) is a means of achieving multitasking. In the traditional meaning of the term, as used in Unix System V and Solaris, a LWP runs in user space on top of a single kernel thread and shares its address space and system resources with other LWPs within the same process. Multiple user level threads, managed by a thread library, can be placed on top of one or many LWPs - allowing multitasking to be done at the user level, which can have some performance benefits.
类似 pthread 这样的 1:1 (LWP:KLT)模式,一个 LWP 是由一个 KLT 直接映射上的,实际上现在很多内核都是这种模式,Windows NT、Linux 都是。当然 Solaris (好像曾经叫 SunOS?)这种还会提供 N:1 的混合线程(不过应该没有专门 1:N 的,N:N 的应该有,java.util.concurrent 的 FJP 应该就属于这类,对应 j.u.c 的 FixedThreadPool 固定线程到任务的),目前大家的很多 JRE 环境实例(当然包括 JDK)大概都是直接一个 Thread 映射到一个 KLT 的(比如 9012 年的 Windows
如果喜欢不妨多了解一下,我没啥本事只能说这点了(大佬们多多指教 QAQ
For applications that require separate or custom pools, a ForkJoinPool may be constructed with a given target parallelism level; by default, equal to the number of available processors. The pool attempts to maintain enough active (or available) threads by dynamically adding, suspending, or resuming internal worker threads
同时也有类似的概念 Green Threads,用户级的线程实现,它不依赖操作系统的支持(所以,DOS 上都能用,这就是说 MRI Ruby 的一些早期版本甚至可以在 MSDOS <=6.x 上用多线程的原因)开始一些 20 世纪 Sun 的 JVM 也是 Green Threads,可是这个东西就有很大弊端,比如系统资源分配、CPU 也就是执行资源分配上操作系统认不出你这个用户自己弄的线程实现,系统资源(比如文件、互斥体、Timer 们)上的东西就很难实现甚至不可能实现,所以也不是太好,当然背后由系统级线程 KLT 支持的也有自己的缺陷,就是 User-mode 和 Kernel-mode 互相切来切去更频繁,开销比较大,CLR via C# 上是有讲的
当然这些和什么用户模式、内核模式、系统资源、任务调度之间有很大关系... 所以我还是回去用 Java 抽象出来的 java.lang.Thread 好了(删除)
坏处就是 JVM 平台上同步的确是比较简单的,他们都用 Monitor 这种重量级的方法... 当然商用 JVM 实现的优化肯定要做... 早些时候(JDK 1.2 还是 1.3 之前) Java 的
JVM 平台上对开发者们素质的要求肯定是比 C#、C++ 这种低的(但是不希望大家都只会用个
这里我们不讨论 Coroutines(协程),也不讨论什么抢占式线程、非抢占式线程,也不讨论什么原子性操作... 可重入... 线程安全... 因为我不是太懂,当然我也不是完全不懂。差不多就行了
好了不说了(科普一下而已(
这个本来是我在某国产 JVM 书上并发实践上看到的,当然操作系统笔记上也有讲(肯定的,现在哪个操作系统不是多用户多任务... 况且,据说此书是他们应付考研用的,不过目前我不是很熟,其中很多问题 C++ 这样的并发编程程序员都能遇到,不只是操作系统层面的问题)
LWP 是 LightWeightProcess,轻量级进程的意思
对应的概念是 KLT(Kernel-Level Threads),系统级线程
In computer operating systems, a light-weight process (LWP) is a means of achieving multitasking. In the traditional meaning of the term, as used in Unix System V and Solaris, a LWP runs in user space on top of a single kernel thread and shares its address space and system resources with other LWPs within the same process. Multiple user level threads, managed by a thread library, can be placed on top of one or many LWPs - allowing multitasking to be done at the user level, which can have some performance benefits.
类似 pthread 这样的 1:1 (LWP:KLT)模式,一个 LWP 是由一个 KLT 直接映射上的,实际上现在很多内核都是这种模式,Windows NT、Linux 都是。当然 Solaris (好像曾经叫 SunOS?)这种还会提供 N:1 的混合线程(不过应该没有专门 1:N 的,N:N 的应该有,java.util.concurrent 的 FJP 应该就属于这类,对应 j.u.c 的 FixedThreadPool 固定线程到任务的),目前大家的很多 JRE 环境实例(当然包括 JDK)大概都是直接一个 Thread 映射到一个 KLT 的(比如 9012 年的 Windows
如果喜欢不妨多了解一下,我没啥本事只能说这点了(大佬们多多指教 QAQ
For applications that require separate or custom pools, a ForkJoinPool may be constructed with a given target parallelism level; by default, equal to the number of available processors. The pool attempts to maintain enough active (or available) threads by dynamically adding, suspending, or resuming internal worker threads
同时也有类似的概念 Green Threads,用户级的线程实现,它不依赖操作系统的支持(所以,DOS 上都能用,这就是说 MRI Ruby 的一些早期版本甚至可以在 MSDOS <=6.x 上用多线程的原因)开始一些 20 世纪 Sun 的 JVM 也是 Green Threads,可是这个东西就有很大弊端,比如系统资源分配、CPU 也就是执行资源分配上操作系统认不出你这个用户自己弄的线程实现,系统资源(比如文件、互斥体、Timer 们)上的东西就很难实现甚至不可能实现,所以也不是太好,当然背后由系统级线程 KLT 支持的也有自己的缺陷,就是 User-mode 和 Kernel-mode 互相切来切去更频繁,开销比较大,CLR via C# 上是有讲的
当然这些和什么用户模式、内核模式、系统资源、任务调度之间有很大关系... 所以我还是回去用 Java 抽象出来的 java.lang.Thread 好了(删除)
坏处就是 JVM 平台上同步的确是比较简单的,他们都用 Monitor 这种重量级的方法... 当然商用 JVM 实现的优化肯定要做... 早些时候(JDK 1.2 还是 1.3 之前) Java 的
volatile 语义都有问题,不能阻止指令重排序,『著名』的双检锁 Singleton 模式都会直接当场爆炸不可避(尤其是那些 Constructor 副作用很强大的类...)JVM 平台上对开发者们素质的要求肯定是比 C#、C++ 这种低的(但是不希望大家都只会用个
synchronized,volatile 而且是滥用这种万能同步语义(那玩意,说实话,真的很 trivial,我开始完全不懂数据竞争同步问题的时候(就是完全没有任何分析能力)都会用它同步多线程的 Hashtable 了(synchronized 的 HashMap)可以说是相当简单相当 trivial(这里我们不讨论 Coroutines(协程),也不讨论什么抢占式线程、非抢占式线程,也不讨论什么原子性操作... 可重入... 线程安全... 因为我不是太懂,当然我也不是完全不懂。差不多就行了
好了不说了(科普一下而已(
duangsuse::Echo
Yuuta 重写的代码我看了,都还好。略微使用了一些 Kotlin 额外的特性,但主要还是语法糖之类的 这里真的是服了国中生的精力,这么长的代码也写得。怀念初中的时候哈?( 推荐使用 辅助函数 来使诸如 if (startHour == 0 && startMinute == 0 && endHour == 0 && endMinute == 0) { …
另外 #fix 再说一个问题,就是我这里提的这一条其实是我的误解 #Android
至于这一条呢,是我在《Kotlin 极简教程》上注意到的,并不适合这种情况,是我误记了
它是说 Kotlin 的
后面那句说的就是可以加
而 Trumeet(Yuuta)写的
至于这一条呢,是我在《Kotlin 极简教程》上注意到的,并不适合这种情况,是我误记了
它是说 Kotlin 的
Any(因为 Kotlin 开始就没有只考虑 JVM,后来还有 KJS、KN 呢,所以 Kotlin 自己语言层面的一些东西不单单在跟着 Java,如现在的一些 Kotlin JVM Developer 们的日常,Kotlin JVM 要 Kotlin 反射还得加依赖还是什么的)没有 Java (就是 Kotlin 的 Any? 和 Any 映射到 java.lang.Object)的 Object#wait Object#notify 这种锁同步工具 Kotlin 里就不推荐了(因为 Any 类型里面没标这些方法虽然 JVM 运行时里是有的,Object 对象当然能响应这些调用),推荐使用专门的并发编程工具比如 java.util 里面那些后面那句说的就是可以加
(o as Object) 强制转换到 java.lang.Object (原来的类型是 kotlin.Any)来使用这几个方法而 Trumeet(Yuuta)写的
private val lock = Any()实际上他后来是要
synchronized (lock) { ... } 的(而不是 lock.wait(5.seconds()) 这种对 java.lang.Object#wait(long) 的调用),这当然没有问题,要不然 kotlinc 也不给过了。
duangsuse::Echo
学习的话还得先在相对标准又简单的环境(如 SQLite)下熟悉 CRUD
CRUD 语句比较简单,都学过了(那么我就再花点时间顺便学一下,感谢 dalao 的分享 #SQL #Postgres
现在也比较合适,因为我在学校的时候学着分析了一下实际的应用,理工两开花,结果非常成功。而且我发现 Kotlin + SpringBoot 开发起来非常模式化、MVC 模式非常简单(就是几个 Entity、后面那些东西都是自动生成的,写个
所以还是比较适合学这类东西的(属于 JPA 层(当然实际上 Web 后端和前端都还有很多知识可以学,不过其实能借助文档比较不用脑子的学会了,不需要多少思考,代价就是不会有太大提升
顺推博文 SQL查询语句及关系代数复习题
这是代码 #code 据说实现的是一个 sorted set 的 table???
INSERT INTO array_test(id, items) VALUES (1, ARRAY[1])
比较简单不讲
ON CONFLICT (id) DO
下面的语句是插入 id 冲突的时候执行的
UPDATE SET items = ARRAY(SELECT DISTINCT item FROM unnest(array_test.items || excluded.items) item ORDER BY item)
WHERE NOT array_test.items && excluded.items
RETURNING items;
子句们(不是所有 #PL 爱好者都必须把 AST 之类的东西搞出来或者指出那个语句什么组成情况...)
简单到幼儿园级别的 SQL 子句就不说了(比如
当然我只是顺手找了点文档而已... 具体实现逻辑自己分析吧(我看了个大概)(因为我准备发书单来着...)
现在也比较合适,因为我在学校的时候学着分析了一下实际的应用,理工两开花,结果非常成功。而且我发现 Kotlin + SpringBoot 开发起来非常模式化、MVC 模式非常简单(就是几个 Entity、后面那些东西都是自动生成的,写个
interface 和几个 Spring EL 一 瞬 解 决模型层查询问题,Controller 层都非常 trivial,@ResponseBody 可以直接组织起 JSON 来,不需要脑子),决定赶快做一个练手(别怪我写的东西太 trival... 或许还不如 OI 生一天的,当然现在 OI 生可能也有些不是多复杂的东西(甚至 dfs 深度优先搜索不会做都不是不可能),当然我觉得都差不多,没啥有意思的算法,就是拿那几个接口绑定一下完了,Xposed 插件什么的都一样,我觉得写这种东西应该比编写效率和建模分析能力,当然也可以当我智障好了。这就轻松多了)所以还是比较适合学这类东西的(属于 JPA 层(当然实际上 Web 后端和前端都还有很多知识可以学,不过其实能借助文档比较不用脑子的学会了,不需要多少思考,代价就是不会有太大提升
顺推博文 SQL查询语句及关系代数复习题
这是代码 #code 据说实现的是一个 sorted set 的 table???
INSERT INTO array_test(id, items) VALUES (1, ARRAY[1])
比较简单不讲
ON CONFLICT (id) DO
下面的语句是插入 id 冲突的时候执行的
UPDATE SET items = ARRAY(SELECT DISTINCT item FROM unnest(array_test.items || excluded.items) item ORDER BY item)
WHERE NOT array_test.items && excluded.items
RETURNING items;
unnest(): This function is used to expand an array to a set of rows.子句们(不是所有 #PL 爱好者都必须把 AST 之类的东西搞出来或者指出那个语句什么组成情况...)
UPDATE SET: UPDATE changes the values of the specified columns in all rows that satisfy the condition. Only the columns to be modified need be mentioned in the SET clauseSELECT DISTINCT: The SELECT DISTINCT statement is used to return only distinct (different) values. RETURNING(of UPDATE): The optional RETURNING clause causes UPDATE to compute and return value(s) based on each row actually updated简单到幼儿园级别的 SQL 子句就不说了(比如
ORDER BY)当然我只是顺手找了点文档而已... 具体实现逻辑自己分析吧(我看了个大概)(因为我准备发书单来着...)
LIOLOG
SQL查询语句及关系代数复习题
数据库原理SQL查询语句及关系代数期末复习
duangsuse::Echo
学习的话还得先在相对标准又简单的环境(如 SQLite)下熟悉 CRUD
深入的话就是 data type 和相关的 operator 和 function,以及 pg 对 CRUD 扩展的专有写法