小编Xia*_*Jia的帖子

在新标签页中打开网址或尽可能重复使用现有网址

现在我有一个链接

<a href="blabla" target="_blank">link</a>
Run Code Online (Sandbox Code Playgroud)

但是,这总是打开一个新选项卡.我想要以下效果

  1. 如果用户已具有具有相同URL的选项卡,请重复使用该选项卡,并在可能的情况下刷新
  2. 否则,打开一个新选项卡

如何使用JavaScript实现这一目标?

如果只有一些特定于浏览器的方法,那就没关系,因此没有相应支持的浏览器用户将"回退"到always-new-tab方式.

html javascript tabs

21
推荐指数
1
解决办法
3万
查看次数

在构造函数中调用虚方法:Java和C++之间的区别

在Java中:

class Base {
    public Base() { System.out.println("Base::Base()"); virt(); }
    void virt()   { System.out.println("Base::virt()"); }
}

class Derived extends Base {
    public Derived() { System.out.println("Derived::Derived()"); virt(); }
    void virt()      { System.out.println("Derived::virt()"); }
}

public class Main {
    public static void main(String[] args) {
        new Derived();
    }
}
Run Code Online (Sandbox Code Playgroud)

这将输出

Base::Base()
Derived::virt()
Derived::Derived()
Derived::virt()
Run Code Online (Sandbox Code Playgroud)

但是,在C++中,结果是不同的:

Base::Base()
Base::virt() // ? Not Derived::virt()
Derived::Derived()
Derived::virt()
Run Code Online (Sandbox Code Playgroud)

(有关C++代码,请参阅http://www.parashift.com/c++-faq-lite/calling-virtuals-from-ctors.html)

什么导致Java和C++之间的这种差异?这是vtable初始化的时间吗?

编辑:我确实理解Java和C++机制.我想知道的是这个设计决定背后的见解.

c++ java virtual-functions object-lifetime vptr

15
推荐指数
3
解决办法
4787
查看次数

查找可被给定数字整除的数组元素的最大总和

这是一个编程问题.

问题如下:

将给出一组数字以及我们必须除以的数字k.我们必须从该数组中选择元素,使得这些元素的总和可以被k整除.这些元素的总和应尽可能大.

输入:

在第一行n上,表示元素的数量.

在下一行,给出了n个数字.

在下一行,我们必须划分k.

输出:

通过从该数组st sum中选择元素,尽可能最大的和可被k整除.

样本输入:

5 
1 6 2 9 5
8
Run Code Online (Sandbox Code Playgroud)

样本输出:

16
Run Code Online (Sandbox Code Playgroud)

注意16可以通过多个数字组合获得,但我们这里只关注最大总和.

我建议的解决方案:

我遍历数组并在给定输入数组的数组b中维护累积和,如:

b=[1 7 9 18 23]
Run Code Online (Sandbox Code Playgroud)

并将数组中的数字mod乘以k并存储到

c=[1 7 1 2 7]
Run Code Online (Sandbox Code Playgroud)

现在数字在c中具有相同的值,即索引0和索引2; 索引1和索引4.现在我已经得到了所有解决方案,答案就是

max(b[2]-b[0],b[4]-b[1])
Run Code Online (Sandbox Code Playgroud)

并且在一种情况下,三个索引在c中具有相同的值,即在其中的情况下

c=[1 2 3 1 1 2]
Run Code Online (Sandbox Code Playgroud)

答案是

max(b[4]-b[0],b[5]-b[1])
Run Code Online (Sandbox Code Playgroud)

基本上减去最右边出现的那个数字的最左边的出现.

我的解决方案只有在有连续元素时才有效.元素之和可以被k整除.期待对正确解决方案的描述

algorithm dynamic-programming

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

Erlang中的接受器池和负载平衡?

来自http://www.erlang.org/doc/man/gen_tcp.html#accept-1:

值得注意的是,不必从套接字所有者进程发出accept调用.使用版本5.5.3及更高版本的仿真器,可以从不同进程发出多个同时接受调用,这允许处理传入连接的接受器进程池.

(Q1)这是否意味着我们可以在Erlang中实现Unicorn风格的负载均衡?

(Q2)如果是,是否有任何现有的服务器或库使用此功能?

(Q3) Unicorn在假设请求处理很快的情况下工作.在同样的假设下,是否有可能通过在Erlang中组合受主和工人来获得更好的性能?

对于那些不熟悉Unicorn的人来说,它是一个传统的UNIX prefork web服务器.工作进程之间的负载平衡由OS内核完成.所有工作者共享一组通用的侦听器套接字,并对它们执行非阻塞的accept().如果没有什么可以接受(),内核将决定给哪个工作进程提供套接字,工作人员将休眠.对于单个侦听器套接字,我相信当工作进程阻塞accept()并且OS内核决定"竞争"的结果时,它是相同的.

erlang performance load-balancing unicorn

8
推荐指数
1
解决办法
2747
查看次数

如何在Haskell中使用hedis通过Unix域套接字连接到redis服务器?

我正在寻找如何使用hedis通过Unix域套接字连接到redis服务器,如hackage页面中所宣传的那样:

通过TCP或Unix域套接字连接:
TCP套接字是连接到Redis服务器的默认方式.对于与同一台机器上的服务器的连接,Unix域套接字提供比标准TCP连接更高的性能.

从构造函数ConnectInfo,以及defaultConnectInfo它,似乎我们应该填写connectPort,因为它PortID具有一个名为构造函数的类型UnixSocket.但它只显示UnixSocket一个String,没有格式细节等.

那么如何connectPort通过Unix域套接字填写连接?谢谢.


更新:我试了一下,发现并不难.以下是我的问候世界.

{-# LANGUAGE OverloadedStrings #-}
import Control.Monad.Trans
import Database.Redis

myConnectInfo :: ConnectInfo
myConnectInfo = defaultConnectInfo { connectPort = UnixSocket "/tmp/redis.sock" }

main :: IO ()
main = do
    conn <- connect myConnectInfo
    runRedis conn $ do
        set "hello" "hello"
        set "world" "world"
        hello <- get "hello"
        world <- get "world"
        liftIO $ print (hello,world)
Run Code Online (Sandbox Code Playgroud)

haskell connection-string unix-socket redis

8
推荐指数
1
解决办法
8904
查看次数

在Haskell中用于内存中图像数据的类型是什么?

我正在尝试建模data Photo并想知道用于图像数据的类型:

> data Photo =
>   Photo
>   { photoUploaderId :: AccountId
>   , photoWidth :: Int
>   , photoHeight :: Int
>   , photoData :: ByteString
>   }
Run Code Online (Sandbox Code Playgroud)

我在Data.ByteString这里用.还有更好的选择吗?

背景:我将把图像数据存储在数据库中,并通过网络连接检索和发送它.在第一次将照片插入数据库时​​,我可能需要对其进行一些操作,例如缩放等.

haskell types

7
推荐指数
2
解决办法
406
查看次数

如何映射哈希数组?

我有一个哈希数组:

arr = [ {:a => 1, :b => 2}, {:a => 3, :b => 4} ]
Run Code Online (Sandbox Code Playgroud)

我想要实现的是:

arr.map{|x| x[:a]}.reduce(:+)
Run Code Online (Sandbox Code Playgroud)

但我认为它有点丑陋,或者至少没有那么优雅:

arr.map(&:a).reduce(:+)
Run Code Online (Sandbox Code Playgroud)

a后一种是错误的,因为哈希中没有调用任何方法。

有没有更好的写作方法map{|x| x[:a]}

ruby arrays hash

7
推荐指数
1
解决办法
8896
查看次数

在C中使用解析器组合器的更好方法?

我正在尝试从头启动C(的子集),而不使用额外的依赖项(解析器生成器,库等)。我也想利用解析器组合器的思想,这在函数式编程中是一种很棒的技术。我想以一种简洁实用的方式将这种想法从功能世界借鉴到过程C中。

我尝试为以下玩具语法实现一些必要的解析器组合器,这也是Simon Peyton Jones 的《实现功能语言-教程》一书中的示例。

greeting -> hg person "!"
hg       -> "hello"
          | "goodbye"
Run Code Online (Sandbox Code Playgroud)

person以字母开头的令牌在哪里?例如,令牌列表

["goodbye", "James", "!"]
Run Code Online (Sandbox Code Playgroud)

被解析为

[(("goodbye", "James"), ["!"])]
Run Code Online (Sandbox Code Playgroud)

(这本书使用了Haskell,很难使它与语言无关,但是您会明白的:-)

我用C语言实现了这一点,您可以在这里查看代码:https : //gist.github.com/4451478

此实现花费200多行C代码,远远超过本书中编写的约20行Haskell。因此,我不确定我是否在使用C进行解析器组合器方面是否正确,以及是否有任何可能的改进。任何建议都欢迎。提前致谢。

c compiler-construction parsing parser-combinators

6
推荐指数
2
解决办法
2870
查看次数

OCaml将标记函数作为参数/标记函数类型等价

假设函数g定义如下.

utop # let g ~y ~x = x + y ;;
val g : y:int -> x:int -> int = <fun>
utop # g ~x:1 ;;
- : y:int -> int = <fun>
utop # g ~y:2 ;;
- : x:int -> int = <fun>
utop # g ~x:1 ~y:2 ;;
- : int = 3
utop # g ~y:2 ~x:1 ;;
- : int = 3
Run Code Online (Sandbox Code Playgroud)

现在有另一个功能 foo

utop # let foobar (f: x:int -> y:int …
Run Code Online (Sandbox Code Playgroud)

ocaml type-theory functional-programming

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

gRPC 中的 call_cq 和 notification_cq 有什么区别?

https://github.com/grpc/grpc/blob/master/examples/cpp/helloworld/greeter_async_server.cc#L91

        service_->RequestSayHello(&ctx_, &request_, &responder_, cq_, cq_,
                                  this);
Run Code Online (Sandbox Code Playgroud)

两次出现cq_对我来说看起来很奇怪所以我深入研究了导致我

https://github.com/grpc/grpc/blob/master/include/grpcpp/impl/codegen/service_type.h#L92

  void RequestAsyncUnary(int index, ServerContext* context, Message* request,
                         internal::ServerAsyncStreamingInterface* stream,
                         CompletionQueue* call_cq,
                         ServerCompletionQueue* notification_cq, void* tag) {
    server_->RequestAsyncCall(methods_[index].get(), context, stream, call_cq,
                              notification_cq, tag, request);
  }
Run Code Online (Sandbox Code Playgroud)

那么call_cq和之间有什么区别notification_cq?使用差异完成队列的潜在用途/好处是什么?

grpc

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