我有一个关于SQL和锁定策略的问题.例如,假设我的网站上有图像的视图计数器.如果我有一个或类似的,请执行以下语句:
START TRANSACTION;
UPDATE images SET counter=counter+1 WHERE image_id=some_parameter;
COMMIT;
Run Code Online (Sandbox Code Playgroud)
假设特定image_id的计数器在时间t0具有值"0".如果两个会话更新相同的图像计数器,s1和s2,在t0同时启动,那么这两个会话是否都有可能读取值'0',将其增加为'1'并且都尝试将计数器更新为'1 ',那么计数器会得到值'1'而不是'2'?
s1: begin
s1: begin
s1: read counter for image_id=15, get 0, store in temp1
s2: read counter for image_id=15, get 0, store in temp2
s1: write counter for image_id=15 to (temp1+1), which is 1
s2: write counter for image_id=15 to (temp2+1), which is also 1
s1: commit, ok
s2: commit, ok
Run Code Online (Sandbox Code Playgroud)
结果:image_id = 15的值'1'不正确,应为2.
我的问题是:
我对一般答案很感兴趣,但如果没有,我对MySql和InnoDB特定的答案感兴趣,因为我正在尝试使用这种技术在InnoDB上实现序列.
编辑:以下方案也可能,导致相同的行为.我假设我们处于隔离级别READ_COMMITED或更高级别,因此s2从事务开始获取值,尽管s1已经向计数器写入"1".
s1: begin
s1: begin
s1: read counter …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Spring将SLF4J记录器注入类中,如下所示:
@Component
public class Example {
private final Logger logger;
@Autowired
public Example(final Logger logger) {
this.logger = logger;
}
}
Run Code Online (Sandbox Code Playgroud)
我找到了这个FactoryBean
课程,我已经实现了.但问题是我无法获得有关注射目标的任何信息:
public class LoggingFactoryBean implements FactoryBean<Logger> {
@Override
public Class<?> getObjectType() {
return Logger.class;
}
@Override
public boolean isSingleton() {
return false;
}
@Override
public Logger getObject() throws Exception {
return LoggerFactory.getLogger(/* how do I get a hold of the target class (Example.class) here? */);
}
}
Run Code Online (Sandbox Code Playgroud)
FactoryBean甚至是正确的方法吗?当使用picocontainers 工厂注入时,你会得到Type
传入的目标.在guice中它有点棘手.但是你如何在Spring中实现这一目标?
我在一些脚本中乱砍,试图解析Javas编写的一些数据DataOutputStream#writeLong(...)
.由于java似乎总是写大端,我在将字节输入时遇到问题od
.这是因为od
总是假设endianess与你当前所在的arch的endianess匹配,而且我在一个小端机器上.
我正在寻找一个简单的单行程来反转字节顺序.假设你知道文件的最后8个字节是由前面提到的writeLong(...)
方法编写的.我目前打印这篇文章的最佳尝试是
tail -c 8 file | tac | od -t d8
Run Code Online (Sandbox Code Playgroud)
,但tac
似乎只对文本有效(足够公平).我找到了一些引用dd conv=swab
,但这只是成对交换字节,并且不能反转这八个字节.
有谁知道这个好的单行程?
我想以"一切都是文件"的方式公开我的程序的设置和统计信息 - 有点/ proc /和/ sys /如何工作.
举个例子,想象一下apache2有这种类型的接口.然后你就可以做这样的事情(假设):
cd /apache2/virtual_hosts
mkdir 172.20.30.50
cd 172.20.30.50
echo '/www/example1' > DocumentRoot
echo 'www.example1.com' > ServerName
echo 1 > control/enabled
cat control/status
enabled true
uptime 4080
hits 0
Run Code Online (Sandbox Code Playgroud)
现在,有没有关于如何做到这一点的教程或类似内容?我主要是寻找'假装成文件或目录'的技巧.我在linux,POSIX或其他更便携的方法会更好,但不是必需的.
在构造函数中,我经常指定一个不存在的字段,并在"CurrentType"类型中选择Ctrl + 1"Create field'memberField'".
问题是我希望默认情况下该字段是最终字段,而不是.这个快速修复的某个地方有模板吗?谢谢.
在我的工作中,我们最近完成了控制应用程序的系统架构,其最大延迟大约为一到两秒.它分布在通过IP LAN进行通信的小型ARM片上盒中.
我们最初预见到我们会使用C或C++,因为它是一种经典的控制系统语言.在讨论了如何实现应用程序之后,我们现在意识到C++具有相当有限的库,缺乏内省,并且具有一些可能减慢开发的其他属性.我的同事随后建议Java可能会胜任这项工作.
我真的害怕为控制应用程序运行GC的延迟,我也不愿意放弃RAII,因为应用程序将使用大量外部资源(套接字,文件句柄,外部库等句柄等).
pro/con列表目前如下:
C++
+ RAII - Easy resource management - it will be a complex system
+ System language - speed if we cant't find a JIT VM for our ARM
+ No GC - no big worst case latencies from the GC
+ Easy to integrate with some shared mem libs that we have to interface with
- Fewer free as in beer libs
- Lacks introspection - Mapping classes to DB and external data formats …
Run Code Online (Sandbox Code Playgroud) 如何从主方法启动Verx 3 Verticle?我已经想出如何从单元测试开始它,入门指南解释了如何构建一个胖罐.但是,我如何从主方法启动它以进行调试,分析等?
作为对"网页加载时如何自动将焦点设置为文本框?"问题的回答?,Espo建议使用
<body onLoad="document.getElementById('<id>').focus();">
Run Code Online (Sandbox Code Playgroud)
Ben Scheirman 回复(未作进一步解释):
任何javascript书都会告诉你不要把处理程序放在body元素上
为什么这被认为是不好的做法?在Espos答案中,说明了"覆盖"问题.这是唯一的原因,还是有其他问题?兼容性问题?
出于教育目的,我已经建立了一个像这样的项目布局(为了更好地适应日食):
-product
|
|-parent
|-core
|-opt
|-all
Run Code Online (Sandbox Code Playgroud)
Parent包含一个包含core,opt和all的聚合项目.Core实现了应用程序的强制部分.Opt是可选部分.所有这些都应该将core与opt结合起来,并将这两个模块列为依赖项.
我现在正在尝试制作以下工件:
他们中的大多数生产相当简单.虽然我对聚合工件有一些问题.我已经设法在'all'模块中使用自定义程序集描述符生成product-all-src.jar,该模块下载所有非传递deps的源代码,这样可以正常工作.这种技术还允许我使用all-with-dependencies.jar.
然而,我最近发现您可以使用source插件中的source:aggregate目标来聚合整个聚合项目的源.对于javadoc插件也是如此,它也通过父项目的使用进行聚合.
所以我在'all'模块方法和放弃'all'模块之间徘徊,只使用'parent'模块进行所有聚合.在"父"中产生一些聚合工件并且在"所有"中产生其他工件感觉不洁净.有没有办法在父项目中创建'product-all'jar,或者在'all'项目中聚合javadoc?或者我应该保留两者?
谢谢
以W3C车辆XSD为例:
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://cars.example.com/schema"
xmlns:target="http://cars.example.com/schema">
<complexType name="Vehicle" abstract="true"/>
<complexType name="Car">
<complexContent>
<extension base="target:Vehicle"/>
...
</complexContent>
</complexType>
<complexType name="Plane">
<complexContent>
<extension base="target:Vehicle"/>
<sequence>
<element name="wingspan" type="integer"/>
</sequence>
</complexContent>
</complexType>
</schema>
Run Code Online (Sandbox Code Playgroud)
,以及'meansOfTravel'的以下定义:
<complexType name="MeansOfTravel">
<complexContent>
<sequence>
<element name="transport" type="target:Vehicle"/>
</sequence>
</complexContent>
</complexType>
<element name="meansOfTravel" type="target:MeansOfTravel"/>
Run Code Online (Sandbox Code Playgroud)
使用此定义,您需要使用xsi:type指定实例的类型,如下所示:
<meansOfTravel>
<transport xsi:type="Plane">
<wingspan>3</wingspan>
</transport>
</meansOfTravel>
Run Code Online (Sandbox Code Playgroud)
我只想实现一个'类型名称' - '元素名称'映射,以便可以用just替换它
<meansOfTravel>
<plane>
<wingspan>3</wingspan>
</plane>
</meansOfTravel>
Run Code Online (Sandbox Code Playgroud)
直到现在我能做到这一点的唯一方法是明确:
<complexType name="MeansOfTravel">
<sequence>
<choice>
<element name="plane" type="target:Plane"/>
<element name="car" type="target:Car"/>
</choice>
</sequence>
</complexType>
<element name="meansOfTravel" type="target:MeansOfTravel"/>
Run Code Online (Sandbox Code Playgroud)
但这意味着我必须在'MeansOfTravel'复杂类型中列出所有可能的子类型.如果你调用元素'plane',是否有办法让XML解析器假设你的意思是'Plane'?或者我必须明确做出选择吗?我只想保持我的设计干 - 如果你有任何其他建议(如团体等) - 我都是耳朵.
java ×6
aggregate ×1
atomic ×1
c++ ×1
controls ×1
eclipse ×1
endianness ×1
handlers ×1
html ×1
increment ×1
javascript ×1
linux ×1
locking ×1
maven ×1
maven-2 ×1
onload ×1
polymorphism ×1
posix ×1
raii ×1
slf4j ×1
spring ×1
sql ×1
swap ×1
templates ×1
unix ×1
vertx3 ×1
xml ×1
xsd ×1
xsitype ×1