2012年,服务器累计达到了一个新高度,非常酷。累积乘积又如何呢?现在有两个选择:
- 递归——缓慢
- CLR——太好了,它可以工作,但是没有办法……
不使用 CLR 怎样实现累积乘法?
2012年,服务器累计达到了一个新高度,非常酷。累积乘积又如何呢?现在有两个选择:
不使用 CLR 怎样实现累积乘法?
有按天划分的视频文件,有来自运动传感器摄像机的标签。根据移动情况,标记出视频在 5 秒间隔内被视为活动的某些点。我们将所有活跃时期合并起来,并从文件中删除其余时期。
一切都会好起来的,只是那里几乎总是有东西在移动:)就是这样。生成的文件持续约 23 小时。一个有声音的视频文件,所以我们感兴趣的事件(每天只有大约 200 个)不会那么吵闹。你需要以某种方式从视频序列中了解声音信号的幅度在什么时刻超过指定的幅度......然后,例如ffmpeg
,我会自己做所有事情。
建议在python
或上有一些东西java
。
但如果有任何免费的解决方案,我不会拒绝建议。
原始格式是视频.flv
,但转换没有问题。
下午好!
找不到好的键盘输入法。虽然停在ReadConsoleA
+ atodw
。但只有数字乘以 100 + 2428。
编码:
.386
.model flat, stdcall
_data segment
_data ends
_text segment
option casemap:none
ExitProcess proto :dword
GetStdHandle proto :dword
ReadConsoleA proto :dword,:dword,\
:dword,:dword,:dword
includelib C:\masm32\lib\kernel32.lib
include \masm32\include\masm32rt.inc
.data
stdin DWORD ?
stdout DWORD ?
cWritten DWORD ?
buff byte 16 dup (0)
cRead DWORD ?
sss dd 0
ddd dd 0
ifmt db "%d", 0
.code
start:
invoke GetStdHandle, STD_INPUT_HANDLE
mov stdin, EAX
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov stdout, EAX
invoke ReadConsoleA, stdin, ADDR buff, sizeof buff, ADDR cRead, 0
;теперь buff содержит введенную строку
invoke atodw, offset buff
;почему-то после выполнения atodw число получается умноженым на 100 + 2428
;поправляем
mov sss, EAX
add sss, -2428 ;отнимаем 2428
mov EAX, sss
mov ddd, 100
div ddd ;делим на 100
mov sss, EAX
invoke wsprintf, ADDR buff, ADDR ifmt, sss ;форматируем число для вывода
invoke WriteConsoleA, stdout, ADDR buff,\
sizeof buff, ADDR cWritten, 0 ;выводим число
invoke ExitProcess, 0 ;завершаем процесс
end start
告诉我为什么会这样。还有什么其他方法可以从键盘输入数字?
如何使用 IDE 更改作为根项目的所有子项目的版本?有一个从控制台执行此操作的 maven 命令mvn -DnewVersion=1.2.3.4 -versions:set
,但我希望能够从 UI 执行此操作。
大嵌套是指以下形式的代码:
param = foo.getSomthing1().getSomthig2().getSomthing3() ...
从而在每次通话中都能起飞NullPointerException
。一个很好的例子是从 XSD 架构生成的类。我需要拉出并分配一些值,如果null
途中至少有一个缺失节点(在 Java 中),我需要分配null
.
一种选择是以下if
形式:
if (foo != null && foo.getSomthing1() != null && ....) {
param = foo.getSomthing1().getSomthig2().getSomthing3() ...
}
这使得代码不可读。将根据 XSD 类模式生成的对象简单地转换为平面 Java 结构看起来很糟糕。
有一个选项可以放入try catch
:) 但它看起来会更糟,更不用说性能了。
我听说过运算符?.
, ?:
, ?[]
,但我无法让它们在本地工作,否则这将是一个有趣的解决方案:
param = foo?.getSomthing1()?.getSomthig2()?.getSomthing3() ...
UPD:选项 c?.
取自非权威来源。我的意思可能是 C#。
告诉我,还有什么办法?
答案似乎很明显:
(new Reflections("package")).getSubTypesOf(SuperClass.class)
但是,如果层次结构被分成几个包,则此构造不会找到所有后继者。
有以下类别:
package1.ParentClass extemds SuperClass
package2.ChildClass extends ParentClass
包package1
而不package2
嵌套。
设计
(new Reflections("package1")).getSubTypesOf(SuperClass.class)
预计返回package1.ParentClass
这是建筑
(new Reflections("package2")).getSubTypesOf(SuperClass.class)
我们package2.ChildClass
的不会回来,虽然这是明显的继承人SuperClass
。
我明白。我可以手动检查包的所有类并收集必要的类。但是没有标准的方法吗?
然而,解释为什么默认ChildClass
不是?对我来说,这是一个非常出乎意料的行为org.reflections.Reflections
。
UPD:我研究了 org.reflections 内核的源代码,一切都井井有条。简而言之,这就是 java 实现 Reflections 的方式。反射中的每个类都只有对父类的引用。因此,无论如何搜索子类都是矫枉过正的。为什么在此枚举中没有来自其他包的超类是一个单独的问题。如此实施。
对于每个特定任务,您需要使用最佳解决方案。但我想听听有关允许您找到所有后代的现有解决方案,java org.reflections 除外。
UPD:另一种有趣且简单的方法。
Reflections reflections = new Reflections("package1", new SubTypesScanner())
Set<Class<?>> subTypes = new HashSet<>();
for (String className : reflections.getStore().get(SubTypesScanner.class.getSimpleName()).values()) {
try {
Class subType = Class.forName(className);
if (SuperClass.class.isAssignableFrom(subType)) {
subTypes.add(subType);
}
} catch (ClassNotFoundException e) {
throw new RuntimeException("Этого не может быть:)", e);
}
}
return subTypes;
此解决方案遍历包的所有类(对象的后代除外)
reflections.getStore().get(SubTypesScanner.class.getSimpleName()).values()
并检查它们是否继承自或实现 SuperClass
SuperClass.class.isAssignableFrom(subType)
性能至少比搜索所有包然后过滤更好