我需要找出一种方法来唯一地识别访问我正在创建的网站的每台计算机.有没有人对如何实现这一点有任何建议?
因为我希望解决方案适用于所有机器和所有浏览器(在合理范围内),我正在尝试使用javascript创建解决方案.
我很感激帮助.谢谢.
编辑:
Cookies不行.
假设计算机没有发生硬件更改,我需要能够基本上创建一个计算机独有的guid并且可重复.我正在考虑的方向是获取网卡的MAC和这种性质的其他信息,这将是访问该网站的机器.
在研究使用和将整数原语转换为字符串的一些小辩论时"" + n
,Integer.toString(int)
我编写了这个JMH微基准测试:
@Fork(1)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@State(Scope.Benchmark)
public class IntStr {
protected int counter;
@GenerateMicroBenchmark
public String integerToString() {
return Integer.toString(this.counter++);
}
@GenerateMicroBenchmark
public String stringBuilder0() {
return new StringBuilder().append(this.counter++).toString();
}
@GenerateMicroBenchmark
public String stringBuilder1() {
return new StringBuilder().append("").append(this.counter++).toString();
}
@GenerateMicroBenchmark
public String stringBuilder2() {
return new StringBuilder().append("").append(Integer.toString(this.counter++)).toString();
}
@GenerateMicroBenchmark
public String stringFormat() {
return String.format("%d", this.counter++);
}
@Setup(Level.Iteration)
public void prepareIteration() {
this.counter = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
我使用默认的JMH选项运行它,我的Linux机器上都存在两个Java VM(最新的Mageia 4 64位,Intel i7-3770 CPU,32GB …
在我的一个Java项目中,由于Java处理(而非)原语的方式,我受到代码重复的困扰.具有相同的变化手工复制到四个不同的位置(之后int
,long
,float
,double
)再次,对于第三次的时候,再和再次我来到非常接近(?)来抢购.
在各种形式中,这个问题已经在StackOverflow上提出了:
共识似乎趋向于两种可能的替代方案:
好吧,第二个解决方案就是我现在正在做的事情,它对我的理智慢慢变得危险,就像众所周知的折磨技术一样.
自从提出这些问题并且Java 7出现以来已过去两年了.因此,我希望有一个更简单和/或更标准的解决方案.
Java 7是否有任何可能在这种情况下缓解压力的变化?我在简明的变更摘要中找不到任何内容,但也许在某处有一些不起眼的新功能?
虽然源代码生成是另一种选择,但我更喜欢使用标准JDK功能集支持的解决方案.当然,使用cpp
或其他代码生成器可以工作,但它添加了更多的依赖项,并需要更改构建系统.
似乎JDK支持的唯一代码生成系统是通过注释机制.我设想一个可以像这样扩展源代码的处理器:
@Primitives({ "int", "long", "float", "double" })
@PrimitiveVariable
int max(@PrimitiveVariable int a, @PrimitiveVariable int b) {
return (a > b)?a:b;
}
Run Code Online (Sandbox Code Playgroud)
理想的输出文件将包含此方法的四个请求变体,最好使用相关的Javadoc注释等.是否有某处注释处理器来处理这种情况?如果没有,构建一个会怎样?
也许最近出现了一些其他技巧?
编辑:
一个重要的注意事项:除非我有理由,否则我不会使用原始类型.即使是现在,在某些应用程序中使用盒装类型也会产生非常真实的性能和内存影响.
编辑2:
使用max()
作为示例允许使用compareTo()
所有数字盒装类型中可用的方法.这有点棘手:
int sum(int a, int b) {
return a …
Run Code Online (Sandbox Code Playgroud) "替换条件与多态"只有在您正在为您选择切换/ if语句的对象类型时才是优雅的.作为一个例子,我有一个Web应用程序,它读取一个名为"action"的查询字符串参数.动作可以具有"视图","编辑","排序"等值.那么如何用多态实现呢?好吧,我可以创建一个名为BaseAction的抽象类,并从中派生ViewAction,EditAction和SortAction.但是,我不需要条件来决定实例化哪种类型的BaseAction?我不知道如何用多态完全替换条件.如果有的话,条件只会被推到链的顶端.
编辑:
public abstract class BaseAction
{
public abstract void doSomething();
}
public class ViewAction : BaseAction
{
public override void doSomething() { // perform a view action here... }
}
public class EditAction : BaseAction
{
public override void doSomething() { // perform an edit action here... }
}
public class SortAction : BaseAction
{
public override void doSomething() { // perform a sort action here... }
}
string action = "view"; // suppose user can pass either …
Run Code Online (Sandbox Code Playgroud) 我在我的一个项目中使用SQLite3,我需要确保插入到表中的行对于它们的一些列的组合是唯一的.在大多数情况下,插入的行在这方面会有所不同,但如果匹配,新行必须更新/替换现有行.
显而易见的解决方案是使用复合主键,并使用conflict子句来处理冲突.在此之前:
CREATE TABLE Event (Id INTEGER, Fld0 TEXT, Fld1 INTEGER, Fld2 TEXT, Fld3 TEXT, Fld4 TEXT, Fld5 TEXT, Fld6 TEXT);
Run Code Online (Sandbox Code Playgroud)
成了这个:
CREATE TABLE Event (Id INTEGER, Fld0 TEXT, Fld1 INTEGER, Fld2 TEXT, Fld3 TEXT, Fld4 TEXT, Fld5 TEXT, Fld6 TEXT, PRIMARY KEY (Fld0, Fld2, Fld3) ON CONFLICT REPLACE);
Run Code Online (Sandbox Code Playgroud)
这确实强制执行我需要它的唯一性约束.不幸的是,这种变化也会导致性能损失超出我的预期.我使用sqlite3
命令行实用程序进行了一些测试,以确保我的其余代码中没有错误.测试涉及在单个事务中或在每个1,000行的100个事务中输入100,000行.我得到了以下结果:
| 1 * 100,000 | 10 * 10,000 | 100 * 1,000 |
|---------------|---------------|---------------|
| Time | CPU | Time | CPU | Time | CPU …
Run Code Online (Sandbox Code Playgroud) 我已经使用Eclipse 3.x几年了,虽然我有一些问题,但它的稳定性和性能,我从来没有对UI本身有任何特别的烦恼......
现在新的和闪亮的Eclipse 4.2已经出炉了,它感觉更稳定,有些更快,但我立刻感到不喜欢它的UI的一些细节:
我发现主工具栏的"弯曲"外观让人分心,在我看来,它与我桌面上的任何其他元素都不能很好地混合.它可能只是一个颜色问题,但工具栏很普遍,值得一提.
默认颜色不适用于笔记本电脑的TFT/TN显示器和我正在使用的两台台式计算机.各种渐变似乎完全消失,标签分隔符实际上是不可见的,工具栏曲线看起来很奇怪.
它几乎不可能分辨出哪个视图处于活动状态 - Eclipse 3.x为活动标签页头使用了一种独特的蓝色.Juno在所有非活动选项卡中使用颜色反转,这听起来可能更明显,但在我看来,效果会丢失,因为活动选项卡仍然处于灰色阴影中,在新UI的整体灰度中丢失. ..
那么,我该如何回归更合理的外观和感觉呢?是否有某个主题选项可以帮助?
PS.1:我在Linux上使用Eclipse/GTK ......
PS.2:无论如何,朱诺的所有颜色都发生了什么变化?
PS.3:我们可以保留新的闪屏吗?那个,我喜欢......
为什么没有c标准的memswap函数,可能看起来像:
int memswap(void *ptr1, void *ptr2, size_t nbytes)?
Run Code Online (Sandbox Code Playgroud)
我知道写起来很容易,但我认为libc可以做一些很棒的技巧来加速它,就像一些实现为memcpy做的那样.
我试图使用intent在活动之间传递一个整数.源活动使调用info.id成为ListView中的选定项.
Intent intent = new Intent(myActivity.this, newClass.class);
intent.putExtra("selectedItem", info.id);
this.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
目标活动使用getIntent然后调用来检索intent
int iSelectedItem = intent.getIntExtra("selectedItem", -1);
Run Code Online (Sandbox Code Playgroud)
iSelectedItem始终为-1而不是传递给putExtra的值.有人可以告诉我我做错了什么或者我是否误解了意图的使用?
为了提高性能,我使用VisualVM采样器分析了我的一个应用程序,使用的最小采样周期为20ms.根据分析器,主线程在该DecimalFormat.format()
方法中花费了近四分之一的CPU时间.
我使用DecimalFormat.format()
与0.000000
模式"转换" double
数字为字符串表示与正好六个小数位数.我知道这种方法相对昂贵并且被称为很多次,但我仍然对这些结果感到有些惊讶.
这种采样分析仪的结果在多大程度上准确?我将如何验证它们 - 最好不要求助于仪器分析仪?
DecimalFormat
对于我的用例,有更快的替代方案吗?推出自己的NumberFormat
子类是否有意义?
更新:
我创建了一个微基准来比较以下三种方法的性能:
DecimalFormat.format()
:单个DecimalFormat
对象重复使用多次.
String.format()
:多个独立呼叫.在内部,这种方法归结为
public static String format(String format, Object ... args) {
return new Formatter().format(format, args).toString();
}
Run Code Online (Sandbox Code Playgroud)
因此我预计它的表现非常相似Formatter.format()
.
Formatter.format()
:单个Formatter
对象重复使用多次.
此方法稍微不方便 - Formatter
使用默认构造函数创建的对象将format()
方法创建的所有字符串附加到内部StringBuilder
对象,该内部对象无法正确访问,因此无法清除.因此,多次调用format()
将创建所有结果字符串的串联.
为了解决这个问题,我提供了我自己的StringBuilder
实例,我在使用之前清除了一个setLength(0)
调用.
有趣的结果:
DecimalFormat.format()
是每次通话1.4us的基线.String.format()
在每次通话2.7便士时慢了两倍.Formatter.format()
在每次通话2.5us时,也慢了两倍.现在它看起来DecimalFormat.format()
仍然是这些替代品中最快的.
我在Delphi中创建了一个工具来创建彩虹表.直到文件增长到3.1 GB才好.我关闭了我的程序.然后我再次打开它,并在执行此代码时崩溃:
Assign(RainbowFile,'Rainbow_table.txt'); {assign a text file}
Append(RainbowFile);
Run Code Online (Sandbox Code Playgroud)
Delphi显示错误"提出的预期类EInOutError消息'I/O错误131'.我的问题:如何将数据附加到大于2 GB的现有文件.//已过时下一个问题:我目前有代码:
Content_to_file := (#13+#10+Start_string+':'+hexstr(GTA_San_Andreas_CRC32(Start_string), 8));
RainbowFile_handle.WriteBuffer( Content_to_file[1], Length(Content_to_file)*SizeOf(Char));
Run Code Online (Sandbox Code Playgroud)
如何摆脱Content_to_file变量.如果可能的话,我想把它直接放到WriteBuffer上.
编辑:
TFileStream适用于大于2 GB的文件.我现在测试了.但是可以这样写:
RainbowFile_handle.WriteBuffer( Start_string[1]+':',
Run Code Online (Sandbox Code Playgroud)
我的意思是不传递变量参数.或者我确实传递了变量的第一个字符?
编辑2:
我目前这样做了:
Content_to_file := (#13+#10+Start_string+':'+hexstr(GTA_San_Andreas_CRC32(Start_string), 8));
RainbowFile_handle.WriteBuffer( Content_to_file[1], Length(Content_to_file)*SizeOf(Char));
Run Code Online (Sandbox Code Playgroud)
没有这个变量可以做到吗?
java ×3
performance ×3
android ×1
browser ×1
c ×1
conditional ×1
cookies ×1
delphi ×1
eclipse ×1
file ×1
insert ×1
java-7 ×1
java-8 ×1
javascript ×1
jmh ×1
pascal ×1
polymorphism ×1
primitive ×1
profiling ×1
refactoring ×1
sql ×1
sqlite ×1