小编blu*_*l2k的帖子

为什么选择Struct Over Class?

使用Swift,来自Java背景,为什么要选择Struct而不是Class?看起来它们是相同的,使用Struct提供更少的功能.为什么选择呢?

struct class design-principles swift

465
推荐指数
10
解决办法
14万
查看次数

使用递归函数进行并行编程?

问题的背景:我正在尝试编写一个利用多核处理器和并行处理的拼图解算法.但是,理想/最简单的解决方案是简单的递归功能.

什么是分解解决方案以利用并行处理递归函数的最佳方法?

下面的代码是一个简单的解谜算法的解决方案(它正常工作).这个例子中的谜题很简单 - 有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)

java concurrency multithreading

13
推荐指数
2
解决办法
5039
查看次数

骨干路由器 - 浏览器后退按钮不触发路由器方法

我有一个看似有效的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)

backbone.js

12
推荐指数
1
解决办法
5792
查看次数

没有SSL的Chrome上的WebSocket连接失败

我正在标准网页和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连接上的特殊代码吗?

ssl websocket tomcat7

11
推荐指数
1
解决办法
8908
查看次数

Rails as_json问题 - 如何有效地包含嵌套对象?

我遇到了一个问题,我正在使用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)

ruby ruby-on-rails ruby-on-rails-3

10
推荐指数
2
解决办法
1万
查看次数

吞噬Angular文件的Gulp任务

我已经设置并运行了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)

angularjs gulp

10
推荐指数
1
解决办法
475
查看次数

跨JVM同步方法

如何跨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.

java concurrency jvm synchronized

9
推荐指数
1
解决办法
7136
查看次数

Backbone Collection - 过滤和渲染集合会丢失对原始未过滤集合的引用

我正在设置一个由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)

javascript backbone.js

6
推荐指数
1
解决办法
3090
查看次数

React Formik - 在组件重新安装和启用按钮上验证表单

我正在编写一个 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)

javascript reactjs formik

6
推荐指数
1
解决办法
3937
查看次数

超出用户名/密码的安全性?

我有一个webapp,需要超出普通Web应用程序的安全性.当任何用户访问域名时,会显示两个文本字段,用户名字段和密码字段.如果他们输入有效的用户/通行证,他们就可以访问Web应用程序.标准的东西.

但是,我正在寻找超出此标准设置的额外安全性.理想情况下,它将是一个软件解决方案,但我也开放硬件解决方案(硬件=密钥卡),甚至程序更改(例如,一次在密码板上使用密码).

webapp的独特之处在于我们提前了解所有用户,并且我们创建了用户名和密码并将其提供给他们.从这个意义上讲,我们可以放心,用户名和密码是"强大的".

但是,我们的客户要求额外的安全性.任何人对如何为安全性添加另一层复杂性有任何想法?

security passwords

5
推荐指数
1
解决办法
319
查看次数