我有一个函数,它是一个事件处理程序websocket.onmessage,因为服务器可以发送多个消息(一个接一个),每个消息将触发该事件,并且因为功能块可能需要几秒钟(内部进行大量渲染) ),当第一个函数调用仍在运行时,可以再次调用该函数.在某些情况下,我需要在此函数中使用一个关键块,以便第二次调用仅在第一次调用结束时启动关键部分,这被认为是在JavaScript中实现锁定的"最佳实践"?
我正在尝试获取和解析一个用希伯来语编写的在线excel文档,但不幸的是用非希伯来语编码.
作为一个例子,我正在尝试转换以下字符串:"âìéåï_1",它使用C#代码作为希伯来语的第一个工作表名称,但我无法这样做.
我知道上面是可转换的,因为当我在NotePad ++中打开它并选择编码/字符集/希伯来语/ Windows 1255时,我可以看到:"גליון_1"这是上述字符串的正确希伯来语表示.
我正在使用以下代码
string str = "âìéåï_1";
Encoding windows = Encoding.GetEncoding("Windows-1255");
Encoding ascii = Encoding.GetEncoding("Windows-1252");
byte[] asciiBytes = ascii.GetBytes(str);
byte[] windowsBytes = Encoding.Convert(ascii, windows, asciiBytes);
char[] windowsChars = new char[windows.GetCharCount(windowsBytes, 0, windowsBytes.Length)];
windows.GetChars(windowsBytes, 0, windowsBytes.Length, windowsChars, 0);
string windowsString = new string(windowsChars);
Run Code Online (Sandbox Code Playgroud)
我假设原始字符串的编码是Windows-1252,因为当我将它粘贴到NotePad ++并将编码更改为Windows-1252时,字符串保持不变...
我可能在这里做错了,有谁知道如何正确转换上述内容?
谢谢,
米奇
我一直在想,因为我在任何地方都找不到它-
可以将基于Json的Web服务与Json.NET库一起使用吗?
换句话说,有没有一种方法可以使JSON.NET反序列化Web服务的请求的JSON对象,而不是.NET默认的序列化器?
一种实现方法可能是声明WebMethod接受纯字符串,然后使用JSON.NET的JsonConvert将原始字符串反序列化为正确的对象,但这意味着请求的语法(从客户端)将是一种尴尬的
还有其他方法或建议吗?
谢谢,
米奇
最近我碰到了这篇非常有趣的帖子:http://opensoul.org/blog/archives/2011/02/07/concerning-activesupportconcern/,它遍历(并解释)了ActiveSupport::Concern源代码.
出现了一些问题,但最重要的是:
显然,有一种方法称为append_features(至少由文档):"Ruby的默认实现方法将此模块的常量,方法和变量添加到基础模块".
我一直认为模块在方法查找链意义上与类相同 - 唯一的区别是你不能从中实例化对象,并且它没有被定义为这个类的"超类"(因为一个模块)实际上并不是一个班级.这意味着当一个类includes是模块时,该模块只是作为类的继承层次结构中的直接父类添加,因此,将在模块中查找包含类中缺少的方法.
但是,如果是这种情况,那么append_features实际上"将方法添加到基本模块"意味着什么,这意味着您可以通过重写此方法(ActiveSupport::Concern实际上这样做)来实际防止此行为.
有人可以在我脑海里创造一些订单吗?
我正在尝试使用 Redis 实现一个基于内存的多进程共享互斥体,它支持超时。
我需要互斥体是非阻塞的,这意味着我只需要知道是否能够获取互斥体,如果不能,只需继续执行回退代码即可。
沿着这些思路:
if lock('my_lock_key', timeout: 1.minute)
# Do some job
else
# exit
end
Run Code Online (Sandbox Code Playgroud)
可以使用 redis 实现未过期的互斥体setnx mutex 1:
if redis.setnx('#{mutex}', '1')
# Do some job
redis.delete('#{mutex}')
else
# exit
end
Run Code Online (Sandbox Code Playgroud)
但是,如果我需要一个具有超时机制的互斥体(例如,为了避免 ruby 代码在命令之前失败redis.delete,导致互斥体被永远锁定的情况,但不仅仅是这个原因)怎么办?
这样做显然是行不通的:
redis.multi do
redis.setnx('#{mutex}', '1')
redis.expire('#{mutex}', key_timeout)
end
Run Code Online (Sandbox Code Playgroud)
因为即使我无法设置互斥体(setnx返回 0),我也会重新设置互斥体的过期时间。
当然,我希望有类似的东西setnxex,可以自动设置密钥的值和过期时间,但前提是该密钥尚不存在。不幸的是,据我所知,Redis 不支持这一点。
然而,我做了 find renamenx key otherkey,它允许您将一个键重命名为其他键,前提是另一个键尚不存在。
我想出了这样的东西(出于演示目的,我将其整体写下来,并且没有将其分解为方法):
result = redis.multi do
dummy_key = "mutex:dummy:#{Time.now.to_f}#{key}"
redis.setex dummy_key, key_timeout, 0
redis.renamenx dummy_key, key …Run Code Online (Sandbox Code Playgroud) 继续我最近关于C#和.NET中的锁的思考,
请考虑以下情形:
我有一个类,其中包含一个特定的集合(对于这个例子,我已经使用了一个Dictionary<string, int>),它使用一种特定的方法每隔几分钟从一个数据源更新,你可以在下面看到它:
DataTable dataTable = dbClient.ExecuteDataSet(i_Query).GetFirstTable();
lock (r_MappingLock)
{
i_MapObj.Clear();
foreach (DataRow currRow in dataTable.Rows)
{
i_MapObj.Add(Convert.ToString(currRow[i_Column1]), Convert.ToInt32[i_Column2]));
}
}
Run Code Online (Sandbox Code Playgroud)
r_MappingLock是一个专用于锁定关键部分的对象,该部分刷新字典的内容.
i_MapObj是字典对象
i_Column1和i_Column2是数据表的列名,其中包含映射所需的数据.
现在,我还有一个类方法,它接收一个字符串并根据提到的字典返回正确的映射int.
我希望这个方法等到刷新方法完成它的执行,所以乍看之下会考虑以下实现:
lock (r_MappingLock)
{
int? retVal = null;
if (i_MapObj.ContainsKey(i_Key))
{
retVal = i_MapObj[i_Key];
}
return retVal;
}
Run Code Online (Sandbox Code Playgroud)
这将防止在更新字典时出现意外行为和返回值,但会出现另一个问题:由于执行上述方法的每个线程都试图声明锁定,这意味着如果多个线程尝试同时执行此方法,每个都必须等到前一个线程完成执行该方法并尝试声明锁定,这显然是一种不良行为,因为上述方法仅用于读取目的.
我想在类中添加一个布尔成员,该类将被设置为true或false,字典是否正在更新,并在"只读"方法中检查它,但这会产生其他基于竞争条件的问题......
任何想法如何优雅地解决这个问题?
再次感谢,
米奇
我将在我的学术Java课程中建立一个httpserver,该服务器应仅支持基本的GET和POST请求。
我想知道是否存在一种处理错误的优雅方法,该错误发生在将 html文件流内容(以及我已经发送响应头)写入HttpServer输出流的过程中。
优雅的方式是指显示用户或将用户重定向到“内部服务器错误”错误页面。
我尝试使用501错误代码重新发送http响应标头,但是java抛出一个异常,声称标头已经发送过...
一种解决方法是将文件的内容读取到内存中,然后再发送标头和内容,但是可能会出现其他问题,此外,我不想在将大文件发送出去作为响应之前将其加载到内存中。
我在运行构建的.NET应用程序时遇到问题,我写道:
我的应用程序使用安装在我的系统上的最新MySql连接器,当我尝试将其添加为参考时,它显示为.NET 4 Framwork组件.
当我在环境中以调试模式运行我的应用程序时,一切都很好,但是当我尝试直接从"release"文件夹运行它作为独立应用程序时,我得到以下异常:
Unhandled Exception: System.IO.FileNotFoundException: Could not load file or ass
embly 'MySql.Data, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969
c44d' or one of its dependencies. The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)
知道怎么解决这个问题?
我正在为Apache Tomcat编写一个过滤器,我想知道是否有办法获取放置在/conf/web.xml文件配置文件中的mimetypes而不显式读取xml文件.Apache Tomcat库中是否有可用的东西?
我为我的项目编写了一个扩展ActiveRecord模型行为的方法,我已经删除了大部分内容,请考虑以下代码:
class ActiveRecord::Base
def self.has_translations
after_initialize :clear_translations_cache
def clear_translations_cache
binding.pry
@_translations = {}
end
end
end
Run Code Online (Sandbox Code Playgroud)
基本上,我想,当我@_translations实例变量得到清除.reload的情况下从数据库中,但由于某些原因,从数据库中获取现有对象,执行该填充的方法后@_translations,再执行object.reload,@_translations仍然包含相同的数据.
我确信在第一次从数据库中获取对象和调用时会执行回调.reload.我使用binding.pry来停止回调方法中的执行,但由于某种原因,self.object_id内部与我的原始对象.reload不同object_id,因此@_translations在原始对象中不会被清除.
附件是控制台输出:
1.9.3p194 :008 > s = TranslatedItem.first
76: def clear_translations_cache
=> 77: @_translations = {}
78: end
[1] pry(#<TranslatedItem>)> self.class
=> TranslatedItem(id: integer, created_at: datetime, updated_at: datetime)
[2] pry(#<TranslatedItem>)> self.object_id
=> 70254243993580
[3] pry(#<TranslatedItem>)> exit
1.9.3p194 :009 > s.object_id
=> 70254243993580
1.9.3p194 :010 > …Run Code Online (Sandbox Code Playgroud) 作为用于学术目的的 HTTP WebServer 项目的一部分,我正在尝试为 Web 应用程序类编写自己的自定义类加载器,但似乎无法正确完成。
一般来说,Web 应用程序位于它们自己的文件夹中,Web 应用程序的“.class”文件与其直接的父文件夹名称相同。(例如 Web1/Web1.class)。下面的代码可以正常工作,直到我到达该defineClass()方法,然后它会抛出以下异常:
java.io.FileNotFoundException: C:\inetpub\javawwwroot\WebApps\java\lang\Object\.Object.class (The system cannot find the path specified)
值得一提的是,下面代码中的C:\inetpub\javawwwroot\WebApps\部分等于m_WebAppsFullPath变量。
此外,当尝试使用
InputStream in = getResourceAsStream(clsFile);
代替 InputStream in = new FileInputStream(clsFile);
我得到一个空返回值...
更新:简而言之,如何加载既不在“CLASSPATH”中也不在我的项目的任何包中的特定类?
protected synchronized Class loadClass(String className, boolean resolve)
throws ClassNotFoundException
{
log("Loading class: " + className + ", resolve: " + resolve);
// 1. is this class already loaded?
Class cls = findLoadedClass(className);
if (cls != null)
{
return cls;
} …Run Code Online (Sandbox Code Playgroud) c# ×4
.net ×3
java ×2
locking ×2
mutex ×2
ruby ×2
classloader ×1
encoding ×1
hebrew ×1
http ×1
inheritance ×1
java-ee ×1
javascript ×1
jquery ×1
json.net ×1
mime-types ×1
module ×1
mysql ×1
redis ×1
reference ×1
tomcat ×1
web-services ×1