Forwarded from dnaugsuz
面试题都是屑,有胆就让通过的人在实际工程里写出那样精巧的代码啊
就是无聊的智商测试,过滤人的而已,根本不在乎实际应用能力。
应聘的人等于做题家,学习的过程等于填鸭,内卷死了。 你能做成什么样和用成什么样根本是两码事。
就是无聊的智商测试,过滤人的而已,根本不在乎实际应用能力。
应聘的人等于做题家,学习的过程等于填鸭,内卷死了。 你能做成什么样和用成什么样根本是两码事。
Forwarded from 一碗脑脊液。
Perseverance 降落伞上的花纹是「Dare Mighty Things」
https://twitter.com/FrenchTech_paf/status/1363992051734478852?s=20
https://twitter.com/FrenchTech_paf/status/1363992051734478852?s=20
Forwarded from 回忆的梦想赞助商️ (U2Fちゃん)
#java #lib 解析xml有什么简单点的办法?
DOM/SAX/XMLPull 手动转型
SimpleXML/JAXB 注解
🌚
SXML 支持注解 databind
我看最简单的方法是用 ruby 或 js (
Erbzur:
手动解析(pull)不是很难复用吗?偏偏xml一堆自定义tag
duangsuse:
JAXB-databind
果然还是注解自动构造的好用
手动解析也可以复用的,但是 pull 的话就会麻烦很多
<users>
<user id=wtf><friends>name
这样的要变成 List<User> 其实不需要几行代码,只是在定义 schema 的同时就能 bind 过去了这样。
啊…… 看来对于强类型语言的 Java 不用 annotation+reflect 想组织 data class 还是不行呢。
调用构造器的话就必须是用反射,否则…… 函数式组合子那一套不起效了,除非用 NamedTuple
DOM/SAX/XMLPull 手动转型
SimpleXML/JAXB 注解
🌚
SXML 支持注解 databind
我看最简单的方法是用 ruby 或 js (
Erbzur:
手动解析(pull)不是很难复用吗?偏偏xml一堆自定义tag
duangsuse:
JAXB-databind
果然还是注解自动构造的好用
手动解析也可以复用的,但是 pull 的话就会麻烦很多
<users>
<user id=wtf><friends>name
这样的要变成 List<User> 其实不需要几行代码,只是在定义 schema 的同时就能 bind 过去了这样。
啊…… 看来对于强类型语言的 Java 不用 annotation+reflect 想组织 data class 还是不行呢。
调用构造器的话就必须是用反射,否则…… 函数式组合子那一套不起效了,除非用 NamedTuple
#Java #lib 话说 jmod 的变动也挺有意思的,原来 jar 只能放 .class 和 resources ,现在 jmods 能放 lib/ bin/ conf/ legal/ 等一大堆东西了,据说还能热更新。
不过
还有 Apache 的 xalan XSLT compiler 和 xerces, jaxp 啥玩意
不得不说把 Java 和 C++ 一比,我还是觉得 C++ 的“设计模式”有范一些,至少不会制造麻烦。 🌚
一般都是用
或
7z x /usr/lib/jvm/default/jmods/java.xml.jmod classes/javax/xml/catalog/CatalogMessages_zh_CN.properties感觉J2EE实现真是很神奇,不仅有 Apache 的 BECL 与 Objectweb ASM ,还有 Java_cup 生成的解析器…… 真是太逗了
cat `find classes -name CatalogMessages_zh_CN.properties` |python -c 'import sys,re; print("".join(eval(f"\"{s}\"") for s in re.findall(": (.*)\\n", sys.stdin.read()) if "\"" not in s))'
不过
javax.xml 包也封了最关键的 stream (start-end element 的 pull 事件), xpath 甚至 namespace.QName
当然还有 datatype 和 catalog, validation, transform (我觉得最草的两个)还有 Apache 的 xalan XSLT compiler 和 xerces, jaxp 啥玩意
不得不说把 Java 和 C++ 一比,我还是觉得 C++ 的“设计模式”有范一些,至少不会制造麻烦。 🌚
一般都是用
org.xml.sax.Parser 或 org.w3c.dom.Document 或
javax.xml.parsers.SAXParser 和 DocumentBuilder
w3c 的 DOM 抽象弄得挺全的啊,除了 Node/Element/Attr/Text , MouseEvent 和 MutationEvent 都有…… (text)Range 和 NameList, Comment, traversal.TreeWalker ...
duangsuse::Echo
啊哈,直接完整封装 inotify 的所有功能了,不过 70 行代码 😋 下载代码, clang fsw.cpp -O3 &&install -Dm755 a.out /usr/bin/infsw 就可以收获简单易用的 fs watcher 了 😊 $ infsw #sysadmin #cplusplus #tools R M attrib close close.rd open move.from move.to A D self.D self.move self.unmount in.queovf in.ignore…
stdbuf -i0 -oL -eL /bin/bash -l
evNames=M,D infsw .|awk '{print($1$2 concat ":"); system("cat " concat $2)}' 结论:这个小脚本(迫真C++脚本)并没有复原被删文件的能力,因为 inotify 没有
beforeDelete 事件(有也没法保证其 fd 的 waiter 都 dispatch 完了🌚 读取到缓冲区需要时间。https://stackoverflow.com/questions/3465619/how-to-make-output-of-any-shell-command-unbuffered#25548995 tail -f 和 less +F 都没有用,因为 bash 的 stdout pipe 是默认 full buffered 的,所以要 unbuffer 一下
Stack Overflow
How to make output of any shell command unbuffered?
Is there a way to run shell commands without output buffering?
For example, hexdump file | ./my_script will only pass input from hexdump to my_script in buffered chunks, not line by line.
Actuall...
For example, hexdump file | ./my_script will only pass input from hexdump to my_script in buffered chunks, not line by line.
Actuall...
#日常精神分裂 #旧事重提 #Java #JS #PLT #cplusplus #project
A: 啊真的很头疼呢, JPlayer 的 fix 和 depth.html 附赠的 Myson 数据描述语言……
B: 像往常一样,我们一起想想吧。
A: 首先说 JPlayer ,这个原先是作为重写 Yuuta 大佬项目的东西,变的蛮多的,后来也有完全的 C++ 重写。
这个东西最后也是长期熬夜 timedout ,失败点是为优化性能加的 Ringbuffer 队列缓冲区利用有瑕疵,导致最后一次缓冲的内容没放完退出
B: 你还记得它的大体数据流程吗。
A: 当时怀疑 Java 计算速度慢所以用的缓冲器预计算一定内容,整体是 while(frame=next()) 呃不,是 while (escape=que[incPtr()]) if(samePtr()) genChunk() 。
B: 对了,你缓冲的帧是什么数据类型啊,二维数组吗?
A: 基于 frame pix diff 的 ANSI escape string ,这个当然是在 chunk 计算的
B: 生成新缓冲帧的程序你大概是没隔离吧,按当时的设计,应该是 genChunk 收到 VideoIO throw NPE 就跳出绘制loop 了,即便最后一块刚刚准备好。我建议 catch 住NPE ,如果 !samePtr(p,p1) 即还有余帧就继续播放,否则才真的退出。
(接下来一段被证明是误会)
A: 这大概是不利于性能的吧,最后一块的每帧都要 catch ,而且还要局部 landingpad ,函数级有一个了。
B: 你也说了是 jacoco 解码器 API 的问题? throw 是不可避免的,只能说或许可以把输出帧的做成子程序,最后一块的 catch 里直接消耗完队列,或者加个 bool ,未结末时先 if 一下避免重复。
A: 我总结一下流结末的情况: genChunk() 生成某帧时 catch 到一次,但是缓冲区没放完,继续放完这一块,再 catch (输入终末)了发现缓冲区没了,就停止播放。
A: 挺简单啊。那么 Myson 该怎么办,这个语言挺不常规的,既有缩进语义又只支持对象?
B: 首先我们先明确下,既有 heading tree 是怎么解析出的。
显然是每个DOM元素都有「深度」,然后非 h1~h6 的元素默认上一次深度或0 的 +1,所以说是「以能解析 Python 的算法解析标题嵌套深」对吧。
A: 可 Myson 就不是直接分开的,觉得要写 RegExp Lexer ,不敢写,挺麻烦的。
B: 看了语法设计,是不支持 array 什么的,只能 key-JSONValue 吗?
A: 是的,只支持一种嵌套,就是更深=子对象
B: 这么说没有行尾冒号也没问题喽?
A: 按理说是这样的……没问题吧?
B: 我能理解,反正你打算完全用缩进深度吧。你又没有支持 optional 多行的语法,唯一的不优雅在于有冒号没用,没冒号的话已有 value 的行后尾随缩进增,就不易看出冲突了。
A: 那具体如何实现呢。
B: 只需要 split lines+trim count 就可以了,之后 line 实际上就是 k-v ,遇到更深的就视为上一行的 v ,递归展开成 JSON.parse object 的形式,检查下不冲突就行了。当然,缩进莫名上升这种就检查不出来。
比如:
A: 听你这么一说我都有把这个 publish 到 npm 骗 star 的欲望了(
B: 我觉得这个挺浪费的,当然 JSON 也一样,key 重复了那么多次,不方便写也不方便传输
A: 有什么办法呢,下一层是 csv 基于 row 存储,那个是 efficient 但是只能存 object array ,而且也不能有嵌套对象
B: 我觉得你加上内联 CSV 的特性,就真的可以骗 star 了。 噢对你还应该把 JSON2Myson 写出来,就是带 indent: string 字段的 TreeWalker 是吧。相信你会写,这对工具化很有用,毕竟 JSON 不好看
A: (若有所思)
B: 你还可以把这个做一个 DOM Tree 的后端,甚至直接变成一个模板语言
B: 对了, JSON2Myson 用于带缩进输出的递归子程序还可以对 k-v 里的 v 立即处理而不必再下层递归,反正顶层又不支持单个值,就当是优化了。
A: 打住打住…… 这当然可以,其实就是翻译 {} 吧。区分 Attr 和 childs 对复用性有些挑战,但我相信能行。
A: 对了,我还有两个小点子:
(1)infsw 可以增加 timedline MM:ss ; 此外还有 exec 与 statics 子命令,以及 event name 的自定义和自动修正 failed watch 的 argv filter ,因为 watchdog py 的 watch medo/exec 和 inotify-tools 的 cli 都太麻烦,就自己写。
(2)之前的 OGL 频谱透明动画可以加一个纵反向的功能,利用 xdo 跟踪到窗口顶端什么的,像 supertuxkart 这样的游戏就可以当音游玩了(迫真)
A: 说起来卓依婷是谁啊,写的歌好熟悉呢
A: 啊真的很头疼呢, JPlayer 的 fix 和 depth.html 附赠的 Myson 数据描述语言……
B: 像往常一样,我们一起想想吧。
A: 首先说 JPlayer ,这个原先是作为重写 Yuuta 大佬项目的东西,变的蛮多的,后来也有完全的 C++ 重写。
这个东西最后也是长期熬夜 timedout ,失败点是为优化性能加的 Ringbuffer 队列缓冲区利用有瑕疵,导致最后一次缓冲的内容没放完退出
B: 你还记得它的大体数据流程吗。
A: 当时怀疑 Java 计算速度慢所以用的缓冲器预计算一定内容,整体是 while(frame=next()) 呃不,是 while (escape=que[incPtr()]) if(samePtr()) genChunk() 。
B: 对了,你缓冲的帧是什么数据类型啊,二维数组吗?
A: 基于 frame pix diff 的 ANSI escape string ,这个当然是在 chunk 计算的
B: 生成新缓冲帧的程序你大概是没隔离吧,按当时的设计,应该是 genChunk 收到 VideoIO throw NPE 就跳出绘制loop 了,即便最后一块刚刚准备好。我建议 catch 住NPE ,如果 !samePtr(p,p1) 即还有余帧就继续播放,否则才真的退出。
(接下来一段被证明是误会)
A: 这大概是不利于性能的吧,最后一块的每帧都要 catch ,而且还要局部 landingpad ,函数级有一个了。
B: 你也说了是 jacoco 解码器 API 的问题? throw 是不可避免的,只能说或许可以把输出帧的做成子程序,最后一块的 catch 里直接消耗完队列,或者加个 bool ,未结末时先 if 一下避免重复。
A: 我总结一下流结末的情况: genChunk() 生成某帧时 catch 到一次,但是缓冲区没放完,继续放完这一块,再 catch (输入终末)了发现缓冲区没了,就停止播放。
A: 挺简单啊。那么 Myson 该怎么办,这个语言挺不常规的,既有缩进语义又只支持对象?
B: 首先我们先明确下,既有 heading tree 是怎么解析出的。
显然是每个DOM元素都有「深度」,然后非 h1~h6 的元素默认上一次深度或0 的 +1,所以说是「以能解析 Python 的算法解析标题嵌套深」对吧。
A: 可 Myson 就不是直接分开的,觉得要写 RegExp Lexer ,不敢写,挺麻烦的。
B: 看了语法设计,是不支持 array 什么的,只能 key-JSONValue 吗?
A: 是的,只支持一种嵌套,就是更深=子对象
B: 这么说没有行尾冒号也没问题喽?
A: 按理说是这样的……没问题吧?
B: 我能理解,反正你打算完全用缩进深度吧。你又没有支持 optional 多行的语法,唯一的不优雅在于有冒号没用,没冒号的话已有 value 的行后尾随缩进增,就不易看出冲突了。
A: 那具体如何实现呢。
B: 只需要 split lines+trim count 就可以了,之后 line 实际上就是 k-v ,遇到更深的就视为上一行的 v ,递归展开成 JSON.parse object 的形式,检查下不冲突就行了。当然,缩进莫名上升这种就检查不出来。
比如:
小明
名字 "明天白"
年龄 14
朋友 ["小张", "小红"]
小张
名字 "张大奇"
年龄 15
最爱
世界 "你好世界"
伍六七 "excited"
突然想到可以这样.. Object.assign
某人 {"id": 1}
姓名 "小白"
朋友 "小黑"A: 听你这么一说我都有把这个 publish 到 npm 骗 star 的欲望了(
B: 我觉得这个挺浪费的,当然 JSON 也一样,key 重复了那么多次,不方便写也不方便传输
A: 有什么办法呢,下一层是 csv 基于 row 存储,那个是 efficient 但是只能存 object array ,而且也不能有嵌套对象
B: 我觉得你加上内联 CSV 的特性,就真的可以骗 star 了。 噢对你还应该把 JSON2Myson 写出来,就是带 indent: string 字段的 TreeWalker 是吧。相信你会写,这对工具化很有用,毕竟 JSON 不好看
A: (若有所思)
B: 你还可以把这个做一个 DOM Tree 的后端,甚至直接变成一个模板语言
html
head
meta {charset: "UTF-8"}
body
a {onclick: "alert()"}
_text "你好。世界"B: 对了, JSON2Myson 用于带缩进输出的递归子程序还可以对 k-v 里的 v 立即处理而不必再下层递归,反正顶层又不支持单个值,就当是优化了。
A: 打住打住…… 这当然可以,其实就是翻译 {} 吧。区分 Attr 和 childs 对复用性有些挑战,但我相信能行。
A: 对了,我还有两个小点子:
(1)infsw 可以增加 timedline MM:ss ; 此外还有 exec 与 statics 子命令,以及 event name 的自定义和自动修正 failed watch 的 argv filter ,因为 watchdog py 的 watch medo/exec 和 inotify-tools 的 cli 都太麻烦,就自己写。
(2)之前的 OGL 频谱透明动画可以加一个纵反向的功能,利用 xdo 跟踪到窗口顶端什么的,像 supertuxkart 这样的游戏就可以当音游玩了(迫真)
A: 说起来卓依婷是谁啊,写的歌好熟悉呢