小编Pra*_*oor的帖子

检查列表是否是回文.如果没有,插入元素使其成为回文.(序言)

我写了下面的代码来检查它是否是回文.我还创建了在列表不是回文时插入元素的逻辑

reverse_list(Inputlist, Outputlist) :-
   reverse(Inputlist, [], Outputlist).    

reverse([], Outputlist, Outputlist).    
reverse([Head|Tail], List1, List2) :-
   reverse(Tail, [Head|List1], List2).

printList([]).
printList([X|List]) :-
   write(X),
   write(' '),
   printList(List).

palindrome(List1) :-
   reverse_list(List1, List2),
   compareLists(List1, List1, List2, List2).

compareLists(L1, [], [], L2) :-
   write("\nList is Palindrome").    
compareLists(L1, [X|List1], [X|List2], L2) :-
   compareLists(L1, List1, List2, L2),
   !.        
compareLists(L1, [X|List1], [Y|List2], [Z|L2]) :-
   write("\nList is not Palindrome. "),
   append(L1, L2, L),
   printList(L).
Run Code Online (Sandbox Code Playgroud)

代码给出了正确的输出

palindrome([a,b,c,a]).
List is not Palindrome. a b c a c b a 

palindrome([a,b,c]).
List is …
Run Code Online (Sandbox Code Playgroud)

list prolog palindrome

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

XOR 128位位组

我试图XOR拖曳128位位组.

#include<iostream>
#include<bitset>

int main()
{
  std::bitset<128> testing;
  testing = std::bitset<128>(0x544F4E20776E69546F656E772020656F) ^
  std::bitset<128>(0x5473206768204B20616D754674796E75);
  std::cout<<testing;
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出是 在此输入图像描述

前64位为0,后64位为XOR.我也收到编译器警告

warning: integer constant is too large for its type
Run Code Online (Sandbox Code Playgroud)

有没有办法XOR 128位位集或我需要创建一个丑陋的黑客?

c++ bitset

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

模拟私有构造函数

Site课程由外部团队提供给我,有一个私人的构造函数。

public class Site
{
   int id;
   String brand;

   private Site(int id, String brand)
   {
      this.id = id;
      this.brand = brand;
   }
}
Run Code Online (Sandbox Code Playgroud)

SiteUtil类(由团队控制)是

public class SiteUtil
{
   public static Site getSite()
   {
     Site site;
     //Logic
     return site; 
   }
 }
Run Code Online (Sandbox Code Playgroud)

getSite()函数对其应用逻辑的数据需要网络调用,因此需要对其进行模拟。它目前没有设置器(也许是为了保持与数据源的一致性,不太确定)

我如下模拟

Site mockSite = new Site(1,"Google");
PowerMockito.when(SiteUtil.getSite(1)).thenReturn(mockSite);
Run Code Online (Sandbox Code Playgroud)

当我使用公共构造函数时,上面的代码当然会编译。我读的解决方案是模拟Site对象的私有构造函数。但是,我对该方法一无所知(第一次编写单元测试!)

java powermockito

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

boost共享指针构造函数析构函数

以下代码

struct Base
{
  public:
  Base()
  {
    std::cout<<"Base Ctr";
  }

  ~Base()
  {
    std::cout<<"Base Dtr";
  }
};

struct Derived : Base
{
  Derived()
  {
    std::cout<<"Derived Ctr";
  }

  ~Base()
  {
    std::cout<<"Derived Dtr";
  }
};

int main()
{
  Base* b = new Derived;
  delete b;
}
Run Code Online (Sandbox Code Playgroud)

给我以下输出:

Base Ctr
Derived Ctr
Base Dtr
Run Code Online (Sandbox Code Playgroud)

解决方案是使基础析构函数成为虚拟的.

但是,当我使用没有虚拟基础析构函数的boost智能指针时.我得到了不同的输出.

int main()
{
  boost::shared_ptr<Base> b = boost::make_shared<Derived>();
}
Run Code Online (Sandbox Code Playgroud)

输出是

 Base Ctr
 Derived Ctr
 Derived Dtr
 Base Dtr
Run Code Online (Sandbox Code Playgroud)

boost shared_ptr如何在不影响(我假设)Base和Derived类的情况下实现此目的.
它如何根据多级继承进行扩展,即基于dervderv的基点,其中dervderv是从derv继承的.

编辑:

大多数答案告诉我,"魔法"发生在make_shared中.但是,我对以下代码获得了相同的行为

boost::shared_ptr<Base> ptr(new Derived);  
Run Code Online (Sandbox Code Playgroud)

c++ boost shared-ptr

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

显示两行之间更改的所有列

我需要使用PostgresSql.我得到下表称钱作为输入

Cash | Adhoc | Collateral | Total
 ---------------------------------
 20  |   30  |    40      |   90
 32  |   12  |    40      |   84
 10  |   12  |    40      |   62
 13  |   20  |    50      |   83
Run Code Online (Sandbox Code Playgroud)

顾名思义,总和是该行的现金,临时和抵押价值的总和.

我需要以下输出表

ChangeType  |  ChangeAmount
---------------------------
    Cash    |       12
    Adhoc   |      -18
    Cash    |      -22
    Cash    |       3
    Adhoc   |       8
 Collateral |       10
Run Code Online (Sandbox Code Playgroud)

这是阶段1.在下一阶段,将添加一个名为clientId的新列,并为每个特定客户端显示这些更改.假设client1是第1行,客户端2是第2行和第3行,然后client1再次是第4行.然后将使用row1和row4形成client1的比较表.

输出表将是

  ChangeType  |  ChangeAmount |  ClientId
------------------------------------------
    Cash      |       7       |   client1
    Adhoc     |      -10      |   client1
 Collateral …
Run Code Online (Sandbox Code Playgroud)

sql postgresql

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

动态设置docker容器的JAVA_HOME

我的 docker 容器需要设置 JAVA_HOME。我已将其添加到 Dockerfile 中,如下所示

ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/jre
Run Code Online (Sandbox Code Playgroud)

但是,这是值的硬编码。有没有办法可以从图像本身动态获取这个值

java-home docker dockerfile

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

从docker文件调用时,keytool错误:java.io.FileNotFoundException(权限被拒绝)

我正在尝试使用我的Docker文件在Docker映像中安装证书

ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64

COPY app-module/src/main/resources/certificates/A.crt /etc/ssl/certs/
COPY app-module/src/main/resources/certificates/B.crt /etc/ssl/certs/

RUN $JAVA_HOME/bin/keytool -import -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -noprompt -file /etc/ssl/certs/A.crt -alias A
RUN $JAVA_HOME/bin/keytool -import -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -noprompt -file /etc/ssl/certs/B.crt -alias B
Run Code Online (Sandbox Code Playgroud)

我得到错误

keytool error: java.io.FileNotFoundException: /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts (Permission denied)
Run Code Online (Sandbox Code Playgroud)

我发现的其他答案建议以root / administrator模式运行上述命令。但是,我正在Dockerfile中运行这些命令。我如何克服这个错误?

certificate keytool dockerfile

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

从 JedisPool 过渡到 JedisCluster

我的应用程序使用 AWS 上的 ElastiCache 进行缓存。我们当前的设置使用基本的 Redis 集群,没有分片或故障转移。我们现在需要迁移到启用了分片、故障转移等的集群 Redis 弹性缓存。在 AWS 上创建一个新集群很容易,但我们对如何修改 Java 代码以从集群读取和写入有点迷茫。

当前实现 - 初始化一个JedisPool.

JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(100);
jedisPoolConfig.setMaxIdle(10);
jedisPoolConfig.setMaxWaitMillis(50);
jedisPoolConfig.setTestOnBorrow(true);

String host = "mycache.db8e1v.0001.usw2.cache.amazonaws.com";
int port = 6379;
int timeout = 50;

JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout)
Run Code Online (Sandbox Code Playgroud)

每次我们需要执行操作时,都会从池中借用 Jedis 对象

Jedis jedis = JedisPool.getResource();
Run Code Online (Sandbox Code Playgroud)

新的实施将是

JedisPoolConfig jedisPoolConfig = ...
HostAndPort hostAndPort = new HostAndPort(host, port);
jedisCluster = new JedisCluster(Collections.singleton(hostAndPort), jedisPoolConfig);
Run Code Online (Sandbox Code Playgroud)

问题:文档说 JedisCluster 将用于代替 Jedis(而不是 JedisPool)。这是否意味着我需要在每个线程中创建和销毁一个 JedisCluster 对象。或者我可以重用同一个对象,它会处理线程安全吗?我什么时候完全关闭 JedisCluster 呢?在申请结束时?

jedis amazon-elasticache

4
推荐指数
1
解决办法
2719
查看次数

在单元测试时,在哪里处理NullPointerException(在函数或构造函数中)

以下是我的问题的说明.我目前不知道处理NullPointerException的方法.

public class Util
{
   private Map<Integer, String> myMap;

  public Util(Map<Integer, String> myMap)
  {
     this.myMap = myMap;
  }

  public String getVal(Integer region)
  {
     return myMap.get(region);
  }
}


public class UtilTest {

  @Test
  public void testNull() throws Exception{
    Map<Integer, String> myMap = null;
    Util util = new Util(myMap);

    util.getValue(1);
  }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码将按预期给出NullPointerException.我关心的是我应该在构造函数或函数本身中处理它

在构造函数中如下

  public Util(Map<Integer, String> myMap)
  {
     if(myMap != null)
     this.myMap = myMap;
     else
     this.myMap = new Map<>();
  }
Run Code Online (Sandbox Code Playgroud)

在功能上,它将类似于

 public String getVal(Integer region)
 {
   if(myMap != null)
   return myMap.get(region); …
Run Code Online (Sandbox Code Playgroud)

java unit-testing

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