小编Mar*_*ouf的帖子

如何解决Java泛型中交集类型导致的模糊方法?

我刚刚发现您可以在单个类型参数绑定中指定多个类型(请参阅示例).像任何新工具一样,我一直在尝试探索如何使用(和误用)的可能性.我精心设计了这个例子以帮助说明.

在下面的示例中,编译器给出了一个错误

dispatch(new AlphabetSoup());

对于Demo类型,方法dispatch(Demo.Soup)是不明确的

我能理解这一点,因为任何方法签名都匹配.我的问题是如何在不改变方法的情况下解决这个问题?如果我想要强制调用Soup版本,我可以将其转发给Soup:

dispatch((Soup)new AlphabetSoup())

但我不确定你是如何强制拨打其他版本的.可能吗?

public class Demo {

    interface HasA { public char getA(); }
    interface HasB { public char getB(); }
    interface HasC { public char getC(); }

    interface Soup { 
        public void eat();
    }

    class Alphabet implements HasA, HasB, HasC {
        public char getA() { return 'a'; }
        public char getB() { return 'b'; }
        public char getC() { return 'c'; }
    }

    class AlphabetSoup implements Soup,  HasA, HasB, HasC  { 
        public void …
Run Code Online (Sandbox Code Playgroud)

java generics

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

提高修改的预订树遍历算法的可扩展性

我一直在考虑修改前序树遍历算法,用于在平面表(例如SQL)中存储树.

我不喜欢标准方法的一个属性是插入一个节点,你必须触摸(平均)N/2个节点(左边或右边高于插入点的所有东西).

我见过的实现依赖于顺序编号的值.这没有留下更新的余地.

这对于并发和扩展似乎很糟糕.想象一下,你有一棵植根于世界的树,它包含大型系统中每个帐户的用户组,它非常大,你必须将树的子集存储在不同的服务器上.触摸所有节点的一半以将节点添加到树的底部是不好的.

这是我正在考虑的想法.基本上通过划分键空间并在每个级别划分来为插入留出空间.

这是N max = 64 的示例(这通常是数据库的MAX_INT)

                     0:64
              ________|________
             /                 \
         1:31                   32:63
        /    \                 /     \
    2:14    15-30         33:47       48:62
Run Code Online (Sandbox Code Playgroud)

这里,节点被添加到树的左半部分.

                     0:64  
              ________|________
             /                 \
         1:31                  32:63
      /   |   \               /     \
  2:11  11:20  21:30     33:47       48:62
Run Code Online (Sandbox Code Playgroud)

必须扩展alogorithm以进行插入和删除过程,以递归重新编号为子树的左/右索引.由于查询节点的直接子节点很复杂,我认为将父节点ID存储在表中也是有意义的.然后,算法可以选择子树(使用left> p.left && right <p.right),然后使用node.id和node.parent来处理列表,细分索引.

这比仅增加所有索引以便为插入腾出空间(或递减删除)更复杂,但它有可能影响更少的节点(仅插入/删除节点的父节点的后果).

我的问题基本上是:

  1. 这个想法是否已正式化或实施?

  2. 这与嵌套间隔相同吗?

sql algorithm scalability nested-sets

9
推荐指数
2
解决办法
4698
查看次数

如何使用线性插值估计两个地理坐标之间的当前位置?

我有以下可用的:

  • 最后报道的lat,lon w/timestamp
  • 目标lat,lon
  • 估计的目标时间
  • 标题

如何随时间插入估计的位置?

我知道这足以计算出行程剩余时间所需的平均速度.给定一个直线距离,这是非常微不足道的.我知道它与矢量有关,但我有点生疏,并认为最好咨询一些专家.

我需要这个更新速率的原因是有限的,所以为了显示平滑的动画,我需要猜测更新之间的当前位置.

目标平台是Google地图应用程序,因此我可以使用一些基本功能,例如两个坐标之间距离的地理校正功能.语言并不重要,因为我知道许多语言,如果需要,可以移植或调整任何示例.然而,一般的解决方案是优选的


这只是两个独立的矢量计算吗?

latestimate = latstart + (?lat * P)
lonestimate = lonstart + (?lon * P)

Where:
   testimated = the reported estimated time to target
   telapsed = time since last time estimate
   P = telapsed / testimated
   ?lat = latreported - lattarget
   ?lon = lonreported - lontarget

language-agnostic math interpolation estimation geospatial

8
推荐指数
2
解决办法
6453
查看次数

以太网MAC地址作为设备的激活码?

假设您在现场部署了网络连接设备(小型PC).您希望在打开电源后允许这些呼叫回家,然后由最终用户识别和激活.

我们当前的计划涉及用户将MAC地址输入我们网站上的激活页面.稍后我们的软件(在盒子上运行)将从接口读取地址并在"回拨"数据包中传输.如果匹配,则激活具有客户信息和框的服务器响应.

我们喜欢这种方法,因为它易于访问,并且通常印在外部标签上(FCC要求?).

有什么问题需要注意?(所使用的硬件外形小巧,因此所有NIC等都是嵌入式的,并且很难改变.客户通常不会以任何方式直接访问操作系统).

我知道微软使用PCI设备ID,内存大小等为Windows激活做了一些疯狂的模糊散列函数.但这对我们的需求来说似乎有些过分.

-

@Neall基本上,打电话到我们的服务器,为了讨论的目的,你可以叫我们制造商.

Neall是正确的,我们只是将地址用作常量.我们将读取它并在另一个数据包中传输它(比如HTTP POST),而不是取决于从以太网帧以某种方式获取它.

licensing ethernet drm activation

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

GWT:如何避免在生成的JavaScript代码中调用dynamicCast和canCastUnsafe?

我正在用Java编写一些专用数据结构,用于浏览器(用GWT编译成JavaScript).

我试图匹配一些内置JDK类的性能我注意到运行速度相当快,但是当我将我的代码跟踪与一些模拟的JDK代码进行比较时,我有很多对dynamicCast和canCastUnsafe的调用虽然JDK模拟类没有.它只是考虑到性能上的差异......

任何GWT大师都知道如何避免这种情况?这相当于20%的开销:-(

细节:

下面是10,000个随机整数插入的配置文件输出(在Firebug中捕获),介于0到100,000之间,分为两个不同的数据结构:

Google的java.util.TreeMap(一种红黑树)的TreeMap实现:

Profile (4058.602ms, 687545 calls)
Function              Calls      Percent   Own Time
$insert_1             129809     41.87%    1699.367ms
$compare_0            120290     16%        649.209ms
$isRed                231166     13.33%     540.838ms
compareTo_0           120290      8.96%     363.531ms
$put_2                 10000      6.02%     244.493ms
wrapArray              10000      3.46%     140.478ms
createFromSeed         10000      2.91%     118.038ms
$TreeMap$Node          10000      2.38%      96.706ms   
initDim                10000      1.92%      77.735ms   
initValues             10000      1.49%      60.319ms   
$rotateSingle           5990      0.73%      29.55ms  
TreeMap$Node           10000      0.47%      18.92ms 
Run Code Online (Sandbox Code Playgroud)

我的代码(AVL树):

Profile (5397.686ms, 898603 calls)
Function              Calls      Percent   Own Time
$insert               120899     25.06%    1352.827ms
$compare              120899     17.94% …
Run Code Online (Sandbox Code Playgroud)

gwt

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

Hibernate和JPA - 错误映射通过接口公开的嵌入式类

我们有一组接口,用作API,并从其他模块引用.这些接口的一组具体实现,对"主"应用程序模块是私有的.这些类带有许多注释(JPA以及用于XML序列化的XStream).

我遇到了一个问题.我们有一个用户类,其中包含与位置相关的许多字段.我们想把它们放到Address类中.我们希望数据(现在)保留在同一个表中.该方法是一个嵌入式类.

问题是类型签名必须仅引用其他接口以满足它们实现的接口.

当我尝试持久化UserImpl时,我得到了异常:

org.hibernate.MappingException:无法确定:com.example.Address的类型,在表:User,对于列:[org.hibernate.mapping.Column(address)]

示例代码:

interface User {
    int getId();
    String getName();
    Address getAddress();
}

@Entity
class UserImpl implements User {
    int id;
    String name;
    Address address;

    int getId() {
        return id;
    }

    void setId(int id) {
        this.id = id;
    }

    String getName() {
        return name;
    }

    String setName(String name) {
        this.name = name;
    }

    @Embedded
    Address getAddress() {
        return address;
    }

    void setAddress(Address address) {
        this.address = address;
    }
}


interface Address {
    String getStreet();
    String getCity();
    String …
Run Code Online (Sandbox Code Playgroud)

persistence hibernate jpa

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

在AppEngine中思考

我正在寻找资源来帮助将我的设计技能从传统的RDBMS数据存储迁移到AppEngine DataStore(即:'Soft Schema'风格).我已经看过几个演讲,全部涉及总体主题和一些特定技巧.

我想知道是否有一个地方我们可以将经验("来自战壕")的知识汇集到现实世界的方法上,重新思考数据的结构,特别是移植现有的应用程序.我们基于Hibernate,并且可能已经使用我们的数据模型走错了路径,产生了一些我们的数据库正在努力解决的粗略查询.

请回复:

  1. 您已将一个非平凡的应用程序移植到AppEngine
  2. 您已经在AppEngine中从头开始创建了一种常见的应用程序
  3. 你没有做过1或2,但正在考虑它,并希望分享你自己的发现到目前为止.

python java google-app-engine data-modeling

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

使用浏览器后退按钮时忽略内容协商

情况如下:

我有一个Web应用程序响应对资源列表的请求,让我们说:

/items
Run Code Online (Sandbox Code Playgroud)

这最初是由Web浏览器通过导航到该路径直接请求的.浏览器使用它的标准"Accept"标题,其中包含"text/html",我的应用程序注意到这一点,并返回项目列表的HTML内容.

在返回的HTML中是一些JavaScript(jQuery),然后执行ajax请求来检索实际数据:

/items
Run Code Online (Sandbox Code Playgroud)

只有这一次,"Accept"标头显式设置为"application/json".同样,我的应用程序注意到这一点,JSON正确地返回到请求,数据被插入到页面中,一切都很愉快.

出现问题:用户导航到另一个页面,然后按下BACK按钮.然后提示他们保存文件.这结果是项目列表的JSON数据.

到目前为止,我已经在Google Chrome和Firefox 3.5中证实了这一点.

这里有两种可能的答案:

  1. 我该如何解决这个问题.是否有一些神奇的Cache-Control标头组合或其他伏都教导致浏览器在这里做正确的事情?

  2. 如果你认为我在这里做了一些可怕的错误,我该怎么办呢?我正在寻求正确性,但也试图不牺牲灵活性.

如果有帮助,该应用程序是使用Restlet 2.0m4的JAX-RS Web应用程序.如果它有用,我可以提供示例请求/响应标头,但我相信这个问题是完全可重现的.

ajax json web-applications jax-rs content-negotiation

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

Java优化:( Hotspot/Dalvik)优化最终方法返回常量?

任何人都可以告诉我,Hotspot或Dalvik是否足够聪明,可以内联调用返回常量(静态最终)int值的final方法?理想情况下,方法调用将被常量替换.这可能是在类加载时或通过JIT.

这对我正在研究的一些代码的设计有影响.

java android jit jvm-hotspot dalvik

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

为什么这个代码是由avr-gcc生成的,它是如何工作的?

这是我正在研究的C项目的反汇编AVR代码片段.我注意到这个好奇的代码正在生成,我无法理解它是如何工作的.我假设这是一种荒谬的优化......

解释是什么?

92:         ticks++;         // unsigned char ticks;
+0000009F:   91900104    LDS       R25,0x0104     Load direct from data space
+000000A1:   5F9F        SUBI      R25,0xFF       Subtract immediate
+000000A2:   93900104    STS       0x0104,R25     Store direct to data space
95:         if (ticks == 0) {
+000000A4:   2399        TST       R25            Test for Zero or Minus
+000000A5:   F009        BREQ      PC+0x02        Branch if equal
+000000A6:   C067        RJMP      PC+0x0068      Relative jump
Run Code Online (Sandbox Code Playgroud)

具体来说,为什么第二条指令从R25中减去0xFF而不仅仅是INC R25

compiler-construction optimization assembly avr avr-gcc

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