我对弹簧mvc和螺纹安全性有疑问.
我们正在开发将存储在tomcat上的Web应用程序.如果我理解正确,Tomcat会根据请求创建线程,并且它有一些线程池.现在,调度程序servlet在请求之间共享,可能是线程安全的.
但是当我创建这样的控制器:
@Controller
@RequestMapping("/manage")
public class QuestionManagementController {
Run Code Online (Sandbox Code Playgroud)
他有Singleton范围,所以来自每个用户的每个请求都使用相同的控制器.
我想知道这个问题通常是如何解决的:
1:是否使用Session范围创建了控制器?(但我认为如果一个用户快速做一些可能导致控制器竞争条件的事情,也可能会出现问题).
2:控制器的作用域为 request
3:创建无状态控制器,这些控制器不在类级别共享任何变量,或者将它们置于只读模式
或者也许有一些更好的"最佳实践"可以解决这类问题.
我问这个问题,因为现在我们将它们作为Singleton范围,并且存在一个问题,在大多数方法中我们在数据库中查询用户,并且由于范围,我们无法将此信息存储在类级变量中.我们可以尝试使用一些线程安全的集合,但后来可能有其他资源需要同步访问.
我想将我的Scala项目升级到2.11.1该语言的版本.
当我更新我的build.sbt文件并尝试编译项目时,我得到了
[error] Modules were resolved with conflicting cross-version suffixes in {file:somePathTo}SomeProject:
[error] org.parboiled:parboiled-scala _2.11, _2.10
java.lang.RuntimeException: Conflicting cross-version suffixes in: org.parboiled:parboiled-scala
at scala.sys.package$.error(package.scala:27)
at sbt.ConflictWarning$.processCrossVersioned(ConflictWarning.scala:47)
at sbt.ConflictWarning$.apply(ConflictWarning.scala:30)
at sbt.Classpaths$$anonfun$60.apply(Defaults.scala:1090)
at sbt.Classpaths$$anonfun$60.apply(Defaults.scala:1090)
at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:42)
at sbt.std.Transform$$anon$4.work(System.scala:64)
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
at sbt.Execute.work(Execute.scala:244)
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160)
at sbt.CompletionService$$anon$2.call(CompletionService.scala:30)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
[error] (*:update) Conflicting cross-version …Run Code Online (Sandbox Code Playgroud) 我必须编写使用Unix数据报套接字的简单客户端 - 服务器应用程序.客户端可以根据服务器的请求向服务器发送信息,或者他可以根据自己的请求从服务器接收信息.
我有一个想法,一个线程将等待用户输入,确定我们要发送到服务器的请求,另一个线程将只等待来自服务器的套接字上的消息,如果它是我们请求它的消息将将它写入标准输出,如果是服务器请求线程将写入服务器请求的内容.我会使用互斥锁,因此两个线程不会同时写入同一个套接字.
我的问题是,如果一个线程将从某个套接字读取并且同时其他线程将使用相同的套接字发送数据,套接字将如何表现,是否安全?或者我也应该在这种情况下使用互斥?
我对Bison中的运算符优先级和关联性有疑问.
在每个例子中,我看到的产品都是expr 'op' expr,例如:http://dinosaur.compilertools.net/bison/bison_8.html
但如果我会使用野牛%left和其他关联工具,我会使用语法:
expr| expr binop expr
| expr relop expr
| expr logical_op expr
Run Code Online (Sandbox Code Playgroud)
和
binop: '+'
| '-'
| '*'
| '/'
;
relop: EE
| NE
| LE
| '<'
| GE
| '>'
;
logical_op: AND
| OR
;
Run Code Online (Sandbox Code Playgroud)
是否会使用关联性和优先级规则?
或者我是否需要expr 'op' expr为每个运营商编写明确的解释?
我问,因为当我尝试使用像我发布的那样的语法时,我得到有关冲突的警告.
但是,当我手工编写制作时,我expr '+' expr没有收到任何警告.
我需要在Python应用程序中使用多播,在谷歌搜索了一下之后,我发现了可以工作的代码片段,这里是:
# UDP multicast examples, Hugo Vincent, 2005-05-14.
import socket
import sys
import struct
def send(data, port=50000, addr='239.192.1.100'):
"""send(data[, port[, addr]]) - multicasts a UDP datagram."""
# Create the socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# Make the socket multicast-aware, and set TTL.
s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 20) # Change TTL (=20) to suit
s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_LOOP, 1)
# Send the data
s.sendto(data, (addr, port))
def recv(port=50000, addr="239.192.1.100", buf_size=1024):
"""recv([port[, addr[,buf_size]]]) - waits for a datagram and returns the data."""
# Create the socket …Run Code Online (Sandbox Code Playgroud) 目前我正在为我的服务器端代码编写一些单元测试nodejs.
现在,我的情况是我的自定义模块正在使用其他模块,我的或nodejs标准库,我想模仿它们.首先,我搜索了一些现有的解决方案,例如我发现:https://github.com/thlorenz/proxyquire和https://github.com/mfncooper/mockery.
但今天我尝试使用天真的方法,并做这样的事情: moduleUnderTest
var fs = require('fs');
exports.foo = function(){
console.log("===foo===");
fs.read();
}
Run Code Online (Sandbox Code Playgroud)
和文件moduleUnderTestSpec:
var fs = require('fs');
var moduleUnderTests = require('../server/moduleUnderTests.js');
fs.read = function(){
console.log("===read===");
}
Run Code Online (Sandbox Code Playgroud)
当我跑步时,grunt jasmine_node我可以看到:
===foo===
===read===
Run Code Online (Sandbox Code Playgroud)
所以在这个简单的例子中,我可以将fs模块中的一个函数换成另一个函数.有什么情况我的方法不起作用?
我想部署我的java 7应用程序Heroku但是我遇到了java版本的一些问题.
我system.properties在我的项目根目录(在哪里src和哪里pom.xml)添加了文件内容,java.runtime.version=1.7但我仍然得到这样的东西:
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.0:compile (default-compile) on project lets-code: Fatal error compiling: invalid target release: 1.7
Run Code Online (Sandbox Code Playgroud)
所以我对下一步做什么感到困惑.
我正在尝试学习GNU autotools,我正在学习一些教程,我尝试一步一步地从:
http://kern-81.homepage.t-online.de/autotools_tutorial.pdf
但我有一个问题,在第8页有手动编写的Makefile.in和一行:
BINDIR=@bindir@
Run Code Online (Sandbox Code Playgroud)
后
autoconf
./configure
Run Code Online (Sandbox Code Playgroud)
在我生成的makefile中,我得到了
BINDIR=${exec_prefix}/bin
Run Code Online (Sandbox Code Playgroud)
但是当我这样做的时候
@echo $(exec_prefix)
Run Code Online (Sandbox Code Playgroud)
似乎这个变量是空的,所以我想做的一切
make install
Run Code Online (Sandbox Code Playgroud)
会去/ bin,这有点奇怪,为什么它没有设置为/ usr/bin,我应该向autoconf发出一些参数吗?
同样在这个.pdf文件中写道:
bindir is an output variable of AC INIT which also detects includedir, srcdir, libdir, and others.
Run Code Online (Sandbox Code Playgroud)
是真的吗?因为在这个autoconf.am的例子中它是:
AC_INIT(helloworld, 0.0.1, dev@helloworld.org)
Run Code Online (Sandbox Code Playgroud)
所以这个简单的宏做了所有这些?如果有,怎么样?
我想使用 sha1 alghoritm 来计算一些数据的校验和,问题是在 python 中hashlib输入以字符串形式给出。
是否可以在 python 中计算 sha1,但以某种方式给出原始字节作为输入?
我这样问是因为如果我想计算文件的哈希值,在 CI 中会使用openssl库并只传递普通字节,但在 Python 中我需要传递字符串,所以如果我要计算某个特定文件的哈希值,我会得到不同的结果两种语言。
在我们的域模型中,我们有
@Entity
@SequenceGenerator(name = "wordlist_seq", sequenceName = "wordlist_seq")
public class QuestionSet {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "wordlist_seq")
private Long id;
@OneToMany(cascade = CascadeType.ALL)
private List<Question> questions;
Run Code Online (Sandbox Code Playgroud)
我想写一个查询来获取所有QuestionSet在questions集合中至少有一个与IN谓词匹配的问题的实例,我也希望在questions集合中只有那些匹配的问题.
这是我写的查询:
SELECT s FROM QuestionSet s JOIN s.questions q WHERE q IN (SELECT ar.question FROM AppointedRepetition ar WHERE ar.date < :tomorrow)
Run Code Online (Sandbox Code Playgroud)
date是DateTimejoda-time库中的类型,我设置如下:
query.setParameter("tomorrow", DateTime.now().plusDays(1))
Run Code Online (Sandbox Code Playgroud)
现在这部分工作,我只是得到QuestionSets了匹配正确的,但我也得到了所有的问题,即使,例如,只有其中一个匹配IN.
我的期望是否太高,或者是否有某种方法可以限制questions列表中的实例数量?