小编Amm*_*kun的帖子

C++中的宏和const有什么区别?

我在技术访谈中被问到这个问题:

constC++中的a 和宏有什么区别?

我的回答是宏是一个预处理器指令,如果使用宏,可能很难调试应用程序,因为它在编译之前被常量表达式替换,而a const可以有类型标识符并且易于调试.

任何人都可以指出任何其他差异,哪些应该是首选?

编辑:

来自IBM C++文档:

以下是一些区别#defineconst类型修饰符:

  1. #define指令可用于为数字,字符或字符串常量创建名称,而可声明任何类型的const对象.

  2. const对象受变量的作用域规则约束,而使用的常量不受约束#define.与const对象不同,宏的值不会出现在编译器使用的中间源代码中,因为它们是内联扩展的.内联扩展使得调试器无法使用宏值.

  3. 宏可以用在常量表达式中,例如数组绑定,而const对象则不能.(我认为我们肯定需要使用宏来定义array_size.

  4. 编译器不会对宏进行类型检查,包括宏参数.

c++ macros const

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

实现LRU缓存的最佳方式

我正在研究LRU缓存实现的这个问题,其中在缓存大小已满之后,弹出最近最少使用的项目并将其替换为新项目.

我有两个实现:

1).创建两个看起来像这样的地图

std::map<timestamp, k> time_to_key
std::map<key, std::pair<timestamp, V>> LRUCache
Run Code Online (Sandbox Code Playgroud)

要插入新元素,我们可以将当前时间戳和值放在LRUCache中.当缓存的大小已满时,我们可以通过查找time _to_ key中存在的最小时间戳并从LRUCache中删除相应的键来逐出最近的元素.插入一个新项是O(1),更新时间戳是O(n)(因为我们需要在时间 _to_ 键中搜索对应于时间戳的k.

2).有一个链表,其中最近最少使用的缓存出现在头部,新项目在尾部添加.当项目到达时已经存在于高速缓存中,与该项目的键对应的节点被移动到列表的尾部.插入一个新项是O(1),更新时间戳再次是O(n)(因为我们需要移动到列表的尾部),删除一个元素是O(1).

现在我有以下问题:

  1. 对于LRUCache,这些实现中哪一个更好.

  2. 有没有其他方法来实现LRU Cache.

  3. 在Java中,我应该使用HashMap来实现LRUCache

  4. 我已经看到了诸如实现通用LRU缓存之类的问题,并且还遇到了诸如实现LRU缓存之类的问题.通用LRU缓存是否与LRU缓存不同?

提前致谢!!!

编辑:

在Java中实现LRUCache的另一种方法(最简单的方法)是使用LinkedHashMap并重写boolean removeEldestEntry(Map.entry eldest)函数.

c++ java caching

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

我应该将完整的网页作为html/text传递给其余的GET电话

我正在建立一个服务于动态内容的网站.通过REST在服务器/浏览器之间进行所有通信.PostgreSQL用作数据存储区.

我的问题是任何GET请求,我是否应该动态构建html(以及动态内容).

举个例子

@GET
@Produces(MediaType.TEXT_HTML)
public String getAllEmployee() {
    // employees fetched from the data base
    String html = "<HTML></head> blah blah";
    return html;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是html是否应该动态构建并发送回浏览器.另外像linkedin这样的大型网站如何运作?他们是否动态生成html页面并发回页面?

我能想到的另一种方法是发送带有嵌入AJAX请求的准系统html.然后ajax请求从服务器获取动态内容.

html rest

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

如何在C++中实现垃圾收集器

可能重复:
如何在C++中实现垃圾收集

我最近在一次采访中被问到如何在c ++中实现垃圾收集器.

我的答案是在分配的空间中预先分配内存池和构造对象.还用于存储分配给指针所指向的存储器位置之前的字节中的对象的存储器的大小.

面试官对答案并不满意.

我后来意识到我的解决方案实际上是试图通过预先分配内存池并使用该内存来避免垃圾收集器的主要目标.

但我认为用C++实现垃圾收集器很困难而不必修改编译器.

有什么建议?提前致谢!!!

编辑 似乎其他人也遇到了类似的问题,大量聪明的家伙在这里发表了自己的观点

c++ garbage-collection

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

linkedhashmap,hashmap,map,hashtable之间的区别

我正准备进行软件访谈,现在我几天都遇到了问题.

我无法弄清楚Java Collection API中存在的linkedhashmap,map,hashtable和hashmap之间的区别.

所有这些都具有相同的获取和复杂性吗?我知道map是接口类和hashmap,hashtable,linkedhashmap实现这个接口.那么这是否意味着这三个类的内部实现是一样的?它们是如何在集合api中实现的?

提前致谢!!!

java collections

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

扩展一个包含对List本身的引用的类

我有一个超级类的东西

class SuperClass {
   private String name;
   private List<SuperClass> subList;
   //getter setters
}
Run Code Online (Sandbox Code Playgroud)

我想扩展这个SuperClass以获得更多的字段,比如

class SubClass extends SuperClass {
    private String email;
   //getter setter
}
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是,因为SuperClass包含对SuperClass类型的对象列表的引用,我将如何确保任何SubClass对象保存对SubClass类型的对象列表的引用...它甚至可能吗?我在这里做了什么非常错的事吗?

编辑 我可以做类似的事情

class SuperClass {
private String name;
private List<? extends SuperClass> subList;
public SuperClass(List<? extends SuperClass> subList) {
    this.subList = subList;
  }
}
Run Code Online (Sandbox Code Playgroud)

而现在SubClass只需要调用超类的构造函数

class SubClass extends SuperClass{
    private String email;

    private SubClass(List<? extends SuperClass> subList) {
        super(subList);
      }
    }
Run Code Online (Sandbox Code Playgroud)

但是现在,如果我想在列表中添加一些内容,我将无法做到,因为PECS(生产者 - 扩展,消费者 - 超级)泛型的原则不允许我这样做..所以无论何时,我都必须将对象添加到subList我将不得不创建一个新列表,然后在SubClass中设置列表

java inheritance composition

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

Java 生产者、Stompy Python 消费者、ActiveMQ

我有一个 java ActiveMQ 生产者,它将 Integer 消息生成到 ObjectMessage 实例中。

在 python 方面,我使用 stomp python 来监听队列。但是,尽管所有标头均已正确接收,但我收到空消息正文。

此外,如果我在 java 端将消息类型更改为 TextMessage,我会在 python-consumer 端得到正确的消息。

我也尝试过使用 PyactiveMQ 但效果相同

任何建议将不胜感激!

编辑:这是一个样板java生产者代码和python订户代码,我编写它是为了在python上测试stomp

public class App 
{
Connection conn;
Session session;
MessageProducer producer;

public void registerPublisher(String queueName, String url) throws JMSException {
    ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory("system", "manager" ,url);
    conn = cf.createConnection();
    conn.start();
    session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
    Destination destination = session.createQueue(queueName);
    producer = session.createProducer(destination);
    producer.setDeliveryMode(DeliveryMode.PERSISTENT);

}

public void send(int c) {

    for (int i=0; i<c; ++i) { …
Run Code Online (Sandbox Code Playgroud)

python java activemq-classic stomp

0
推荐指数
1
解决办法
5404
查看次数