小编Ale*_*lec的帖子

面试问题:数据结构设置O(1)中的所有值

我在互联网上遇到了以下面试问题.

描述getValue(int index),setValue(int index,int value)和setAllValues(int value)都是O(1)的数据结构.

虽然数组足以让第一次和第二次操作在O(1)中执行,但第三次(setAllValues)可以提出什么?

data-structures

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

通过预处理检查O(1)中是否有2个树节点相关(祖先/后代)

检查2个树节点是否相关(即祖先 - 后代)

  • 在O(1)时间内解决它,使用O(N)空间(N =节点数)
  • 允许预处理

而已.我将在下面讨论我的解决方案(方法).如果你想先考虑自己,请停止.


对于预处理,我决定做一个预订(先递归遍历root,然后是子),并给每个节点一个标签.

让我详细解释标签.每个标签将由逗号分隔的自然数组成,如"1,2,1,4,5" - 此序列的长度等于(节点的深度+ 1).例如,根的标签是"1",root的子节点将具有标签"1,1","1,2","1,3"等.下一级节点将具有类似"1,1,1"的标签. ","1,1,2",......,"1,2,1","1,2,2",......

假设节点的" 订单号 "是其父节点的子节点列表中的"该节点的从1开始的索引 ".

通用规则:节点的标签由其父标签后跟逗号和节点的" 订单号 "组成.

因此,为了回答O(1)中两个节点是否相关(即祖先 - 后代),我将检查其中一个节点的标签是否是另一个标签的" 前缀 ".虽然我不确定这些标签是否可以被认为占据O(N)空间.

预计会有任何批评者或其他方法.

algorithm tree time-complexity ancestor preorder

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

Caliburn.Micro.使用Autofac自动为IHandle实现者调用eventaggregator.Subscribe()

Caliburn.Micro文档中,作者提到了这种可能性:

文档链接

IHandle继承自标记接口IHandle.这允许使用强制转换来确定对象实例是否订阅任何事件.如果您与IoC容器集成,则可以实现简单的自动订阅.大多数IoC容器(包括SimpleContainer)提供了一个钩子,用于在创建新实例时调用它.只需连接容器的回调,检查正在创建的实例以查看它是否实现IHandle,如果是,请在事件聚合器上调用Subscribe.

如何通过Autofac实现这一目标?

我试图利用装饰器的功能,但当然这对于这种情况来说是不合适的.更重要的是,默认情况下,IHandle <>的实现者没有在容器中注册为IHandle的实例.

PS提供这种不正确的实现以防万一它可能有用,但我怀疑.

builder.RegisterInstance<IEventAggregator>(new EventAggregator());
builder.RegisterDecorator<IHandle>((container, handler) =>
{
    var eventAggregator = container.Resolve<IEventAggregator>();
    eventAggregator.Subscribe(handler);
    return handler;
}, "unsubscribed", "subscribed");
Run Code Online (Sandbox Code Playgroud)

wpf messaging autofac eventaggregator caliburn.micro

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

Maven:属性文件和jar一起

我将我的应用程序打包为jar.

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>...</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

而且我的.properties文件放在里面src/main/resources.我可以随意将此文件移动到任何其他地方.我不希望将属性文件包含在jar中,而是放在同一个输出目录(我们得到jar的地方)并排放置.在Maven中最好的做法是什么?

jar maven-plugin maven-3 maven properties-file

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

为什么C#不支持泛型泛型(带参数化类型的泛型)?

最近(可能是设计缺点)当我需要有一个未修复的MyType<T>地方集合时T(即整个集合中有多个不同的泛型实例),我遇到了常规任务.

由于它被广泛提出(对于这种情况),宣布了一个抽象类:

public abstract class MyType {}
public class MyType<T>: MyType {}
Run Code Online (Sandbox Code Playgroud)

然后我收集了一些MyType.但是对于这个集合,我有一个约束,即任何类型的元素都不超过一个T.

因此,我做了一些自定义实现ICollection<TBase>.我想在其中包含一个Get<TParam>()获取与类型对应的项的方法TParam.以后用作:

MyCollection<MyType> collection = new MyCollection<MyType>();
MyType<int> myInt = collection.Get<int>();
Run Code Online (Sandbox Code Playgroud)

但是我意外地发现我甚至无法宣布它:

public TCustom<TParam> Get<TParam, TCustom<TParam>>() { } //this won't compile
Run Code Online (Sandbox Code Playgroud)

因为内部泛型(或所谓的"泛型泛型")既不支持C#也不支持.NET(我想).您如何看待这些限制背后是否存在任何具体原因(复杂性除外)?

更新1.询问编译器版本和编译器错误.

Microsoft C#,.NET 3.5(Visual Studio 2010).错误:

错误CS0081:类型参数声明必须是标识符而不是类型

错误CS0246:找不到类型或命名空间名称"TCustom"(您是否缺少using指令或程序集引用?)

更新2.被问及我是否需要修复或解释原因.我真的想知道为什么.但如果你有解决问题的好方法,也欢迎你.

更新3. 此博客文章中可能已经回答了这个问题.似乎CLR团队面临着不要过度复杂化语言的巨大压力.

.net c# generics generic-collections nested-generics

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

log4j的.每小时滚动,每天拉链

我可以将log4j配置为每小时翻转,然后将所有每日日志文件压缩为一个zip(这样zip包含24个日志文件).

理想情况下,我只想在一周前和更早的时候压缩文件.但这是问题的另一部分.

java logging log4j

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