使用Swift,来自Java背景,为什么要选择Struct而不是Class?看起来它们是相同的,使用Struct提供更少的功能.为什么选择呢?
问题的背景:我正在尝试编写一个利用多核处理器和并行处理的拼图解算法.但是,理想/最简单的解决方案是简单的递归功能.
什么是分解解决方案以利用并行处理和递归函数的最佳方法?
下面的代码是一个简单的解谜算法的解决方案(它正常工作).这个例子中的谜题很简单 - 有14个插槽编号为1-14.每个拼图都有一个唯一的ID,一个范围告诉你它可以在哪里开始和停止(例如6-8意味着它只适合6-8槽)和价格.该算法试图找到最大化解决方案价格的解决方案.只有1个可以占用一个插槽,空插槽是可以接受的.解决方案会告诉您使用了哪些部件以及总成本.(为了简单起见,还要假设插槽1必须填充).
我尝试将并行性和递归结合起来的解决方案如下所示:为每个使用插槽1的部分创建一个Task,然后在Task中递归查看其余部分,将它们插入剩余空间,同时最大化成本.这是最好的解决方案(可能不是,这就是为什么我在这里).怎么改进?使用并行/递归解决方案时还有其他好的建议吗?
虽然简单的递归在这里运行良好,但我想象一下这个有200个插槽和5000个拼图的拼图.
以下是此示例的解决方案:
ID=1 Price=10.0 Range=1-6
ID=12 Price=8.0 Range=9-14
ID=15 Price=3.0 Range=7-8
public class Puzzle
{
public PuzzleSet calculateResults(PuzzleSet input) throws Exception
{
System.out.println(System.currentTimeMillis());
PuzzleSet results = getPriceMultithread((PuzzleSet)SerializationUtils.clone(input));
System.out.println(System.currentTimeMillis());
return results;
}
private PuzzleSet getPriceMultithread(PuzzleSet input) throws Exception
{
PuzzleSet initial = input.startsAtPoint(1);
ExecutorService exec = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()+1);
Collection<Callable<PuzzleSet>> tasks = new ArrayList<Callable<PuzzleSet>>();
for (int i=0; i<initial.size(); i++)
{
final PuzzleData d = initial.get(i);
final PuzzleSet start = input.higherThan(initial.get(i).rangeUpper);
tasks.add(new Callable<PuzzleSet>() { …
Run Code Online (Sandbox Code Playgroud) 我有一个看似有效的Backbone路由器设置 - 路由被正确触发,视图更新等.但是,当我按下浏览器的"后退"按钮时,根本不会触发路由.此外,在浏览器中键入URL也不会触发路由器.我是否缺少将浏览器特定内容绑定到Backbone(Firefox 11)的步骤.
建立
var messageRouter = new MessageRouter({view: messageListView});
Backbone.history.start();
Run Code Online (Sandbox Code Playgroud)
触发
Backbone.history.navigate("#/view/" + $(this).data("filter-type"), {trigger: true});
Run Code Online (Sandbox Code Playgroud)
路由器代码
var MessageRouter = Backbone.Router.extend({
view : null, /* should always be overridden */
initialize : function(options)
{
this.view = options.view;
},
routes : {
"" : "default",
"/view/:filter" : "filter",
"camera" : "camera"
},
default : function() {
},
filter : function(filterString) {
this.view.setFilter(filterString);
this.view.rerender();
},
camera : function(cameraString) {
}
});
Run Code Online (Sandbox Code Playgroud) 我正在标准网页和Tomcat v7.0.62服务器之间设置WebSocket.在Firefox,Edge和IE11上打开/关闭Tomcat SSL时连接正常.但是,在Chrome(v66.03)中,只有当我在服务器上启用SSL并通过https连接时,websocket才会连接.在Chrome中,当我在服务器上关闭SSL并尝试通过http连接时,它会引发错误.
以下是Chrome尝试通过http连接Tomcat时关闭SSL时出现的错误...
Error in connection establishment: net::ERR_PROXY_AUTH_REQUESTED_WITH_NO_CONNECTION
Run Code Online (Sandbox Code Playgroud)
这是我在客户端上的WebSocket连接代码......
var wss = "wss://";
if (document.location.protocol === "http:") {
wss = "ws://";
}
var wsURL = wss + document.location.host + "/status?sessionId=<%=session.getId()%>";
Run Code Online (Sandbox Code Playgroud)
这是Chrome专用的,需要非https websocket连接上的特殊代码吗?
我遇到了一个问题,我正在使用as_json方法,以及如何在JSON中有效地返回对象,并且它也是作为JSON的belongs_to对象,其中belongs_to对象具有自己的belongs_to对象.代码可能会更好地解释它.
不工作的方式
警报课
class Alert < ActiveRecord::Base
belongs_to :message
# for json rendering
def as_json(options={})
super(:include => :message)
end
end
Run Code Online (Sandbox Code Playgroud)
消息类
def as_json(options={})
super( methods: [:timestamp, :num_photos, :first_photo_url, :tag_names],
include: { camera: { only: [:id, :name] },
position: { only: [:id, :name, :address, :default_threat_level ]},
images: { only: [:id, :photo_url, :is_hidden]} })
end
Run Code Online (Sandbox Code Playgroud)
第一次设置的问题是当我有一个Alert对象和调用时
alert.as_json()
Run Code Online (Sandbox Code Playgroud)
我从Alert中获取了所有属性,并从Message中获取了所有属性,但没有来自Message的其他属性,如Camera,Position等.
这是"它的工作,但可能不是正确的设计方式"
警报类
class Alert < ActiveRecord::Base
belongs_to :message
# for json rendering
def as_json(options={})
super().merge(:message => message.as_json)
end
end
Run Code Online (Sandbox Code Playgroud)
消息类
# for …
Run Code Online (Sandbox Code Playgroud) 我已经设置并运行了gulp任务来创建一个Angular应用程序,它运行时没有错误并正确创建文件,但是当我在浏览器上加载页面时,我收到以下错误消息.
是否有一些步骤或一些插件我缺少将Angular文件全部"工作"?我已经使用了angularFilesort()和ngAnnotate()插件.
var bower = gulp.src(bower_files)
.pipe(concat("bower-expanded.js"))
.pipe(gulp.dest(paths.prod))
.pipe(rename("bower.js"))
.pipe(uglify())
.pipe(gulp.dest(paths.prod + paths.js));
// gather and compress the app's js files
var app = gulp.src(paths.source + "app/**/*.js")
.pipe(angularFilesort())
.pipe(concat("app-expanded.js"))
.pipe(ngAnnotate({
add: true,
single_quotes: true
}))
.pipe(gulp.dest(paths.prod))
.pipe(rename("app.js"))
.pipe(uglify())
.pipe(gulp.dest(paths.prod + paths.js));
Run Code Online (Sandbox Code Playgroud)
错误是
TypeError: (intermediate value)(...) is not a function
(function(angular) {
Run Code Online (Sandbox Code Playgroud)
它指向这些代码行
(function(angular) {
'use strict';
/**
* Called with an array this acts like map, otherwise it acts like _.mapValues
* in lodash.
* @return {Array|Object} The same type …
Run Code Online (Sandbox Code Playgroud) 如何跨JVM同步方法?
我的示例是一个Web应用程序,它限制用户名不能多次登录(换句话说,第一个用户可以登录,但如果另一个用户使用相同的用户名登录,则会被拒绝).
Web应用程序部署在多个服务器上,因此有多个JVM,用户可以尝试使用不同的服务器登录,具体取决于负载均衡器.
这是方法的外观
public synchronized static SessionData logonSync(String userName, String password) throws Exception
{
int count = DB.count("sessions", "WHERE user_name=?", userName);
if (count > 0)
{
throw new Exception("logon.error.loginAlreadyUsed");
}
return logon(userName, password);
}
Run Code Online (Sandbox Code Playgroud)
由于同步方法,它可以在1个应用服务器上正常工作,但是跨多个JVM?两个用户可能正在尝试同时登录不同的Web应用程序.我该如何防止这种情况?
*编辑* 如果您的解决方案想要利用某些事务缓存方法,该应用程序也使用Memcached.
我正在设置一个由Backbone驱动的应用程序.我面临一个"应该是简单的"问题,我有一个名为"Message"的模型,一个名为"MessageList"的Collection,以及名为"MessageView"和"MessageListView"的Views.
MessageListView代码呈现MessageList.我有4个切换按钮,用于过滤MessageListView显示的内容.过滤器按钮为"全部","活动","标记"和"忽略"."全部"是页面加载的初始过滤器.当用户按下"已标记"过滤器时,只会出现带有标志== 1的消息.再次按"全部"时,所有消息应再次出现.
我遇到的问题,以及我的设计中的问题是,当我根据filterString过滤Collection时,对原始整个Collection的引用会丢失.因此,当再次按下"全部"时,消息已丢失.
我很好奇在Backbone中做到这一点的最好方法...
这是设置代码......
var messageListView = new MessageListView({collection: messageList});
Run Code Online (Sandbox Code Playgroud)
这是MessageListView代码......
MessageListView = Backbone.View.extend({
initialize : function() {
this.collection.on("add", function(model) {
var view = new MessageView({model: model});
$("div.cameras").prepend(view.render().el);
});
this.collection.on("remove", function(model) {
var ID = model.id;
$("#message-" + ID).parent("div.message").remove();
});
this.collection.on("reset", function(models) {
$("div.cameras").empty();
models.each(function(message) {
var view = new MessageView({model: message});
$("div.cameras").prepend(view.render().el);
});
});
},
filterMessages : function(filterString) {
var filtered = this.collection.filter(function(model){
if (filterString == "all")
{
return true;
}
else if (filterString == "active")
{ …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个 React 应用程序并使用 Formik 和 Yup 作为表单。我遇到问题的页面是一个向导样式的页面,它在页面加载时呈现 Form1,上面有一个“下一步”按钮。按“下一步”呈现 Form2,并且“返回”和“下一步”按钮与 Form2 一起出现,这将引导您完成向导。
问题在于使用“后退”按钮。完成 Form1 的填写后,“下一步”按钮变为启用状态,我可以移动到下一个表单。当我在 Form2 上时,我希望能够返回到 Form1 并按“返回”按钮。当 Formik 重新渲染时,它会将值正确加载到表单中,但它不会验证表单,因此“下一步”按钮被禁用,即使数据有效。我必须在其中一个字段上引发更改事件才能启用“下一步”按钮。
在这种情况下,当表单重新呈现时,应启用“下一步”按钮。我浏览了文档并尝试了 Formik 中的 validateOnMount 道具,它的名字应该可以工作。文档建议使用 initialErrors,但我不清楚如何使用它。问题也可能是我如何启用/禁用“下一步”按钮。
这已经让我发疯了好几个小时,并且是在周五下午完成此页面的最后一件事。
<Formik
enableReinitialize
validationSchema={validationSchema}
initialValues={initialValues}
validateOnMount
render={({ isValid, values, isSubmitting, handleChange, setFieldValue, setFieldTouched }) => (
<Form className="text-center">
<FieldRow labelName="What's your address? (Can't be a PO Box)">
<AddressField
id="address"
name="address"
data-testid="address"
onChange={handleChange}
onBlur={setFieldTouched}
values={values}
setFieldValue={setFieldValue}
validateForm={validateForm}
/> </FieldRow>
<div className="mt-5">
<Button
data-testid="submit-next"
color="primary"
onClick={() => handleNext(values)}
className="float-right"
disabled={isValid === false || isSubmitting}
>
{isSubmitting …
Run Code Online (Sandbox Code Playgroud) 我有一个webapp,需要超出普通Web应用程序的安全性.当任何用户访问域名时,会显示两个文本字段,用户名字段和密码字段.如果他们输入有效的用户/通行证,他们就可以访问Web应用程序.标准的东西.
但是,我正在寻找超出此标准设置的额外安全性.理想情况下,它将是一个软件解决方案,但我也开放硬件解决方案(硬件=密钥卡),甚至程序更改(例如,一次在密码板上使用密码).
webapp的独特之处在于我们提前了解所有用户,并且我们创建了用户名和密码并将其提供给他们.从这个意义上讲,我们可以放心,用户名和密码是"强大的".
但是,我们的客户要求额外的安全性.任何人对如何为安全性添加另一层复杂性有任何想法?
backbone.js ×2
concurrency ×2
java ×2
javascript ×2
angularjs ×1
class ×1
formik ×1
gulp ×1
jvm ×1
passwords ×1
reactjs ×1
ruby ×1
security ×1
ssl ×1
struct ×1
swift ×1
synchronized ×1
tomcat7 ×1
websocket ×1