这个想法很简单 - 我有两个表,类别和产品.
分类:
id | parent_id | name | count
1 NULL Literature 6020
2 1 Interesting books 1000
3 1 Horrible books 5000
4 1 Books to burn 20
5 NULL Motorized vehicles 1000
6 5 Cars 999
7 5 Motorbikes 1
...
Run Code Online (Sandbox Code Playgroud)
产品介绍:
id | category_id | name
1 1 Cooking for dummies
2 3 Twilight saga
3 5 My grandpa's car
...
Run Code Online (Sandbox Code Playgroud)
现在显示时,父类别包含所有子类别的所有产品.任何类别都可能有子类别.表结构中的count字段包含(或至少我希望它包含)此特定类别中显示的所有产品的计数.在前端,我使用简单的递归函数选择所有子类别,但是我不太确定如何在SQL过程中执行此操作(是的,它必须是SQL 过程).这些表包含有关hundread类别的任何种类,有超过10万种产品.
有任何想法吗?
刚从textmate搬到vim我很好奇.为了能够高效地导航我的项目,我安装了command-t和ack.vim.这些似乎都是vim历史上相对较新的项目.当人们在vim中工作时,传统上做什么来移动项目,他们只是使用文件浏览器还是有一些我不知道的旧学校技巧?
在ASP.NET中,我可以存储会话和应用程序状态.PHP也是如此吗?我似乎无法找到有关应用程序状态的信息.
如果没有,共享状态信息的最佳实践是什么?我需要构建一个所有客户端都可以使用的复杂数据结构.它需要一段时间才能构建,但在构建之后永远不会被编辑.
谢谢,迈克尔
早上好!我们假设我们有以下类:
class MultithreadOperation : IDisposable
{
private IList<Thread> operationThreads;
public void StartOperation()
{
// Initialize and start threads and put them to operationThreads
}
public void StopOperation()
{
// Aborts each thread.
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
disposed = true;
if (disposing)
{
// Release managed resources.
#1:
StopOperation();
}
// Release unmanaged resources.
#2:
StopOperation();
}
}
~MultithreadOperation()
{
Dispose(false);
}
}
Run Code Online (Sandbox Code Playgroud)
实际上,如果实例被丢弃,我需要停止所有线程.此外,如果实例被垃圾收集,我需要停止所有线程(否则,线程将仍然存活,这对我不利).当然,在#1中调用StopOperation()方法是完全合法的.
我想知道如果我们调用StopOperation()到位#2,是否有任何陷阱?据我所知,当~MultithreadOperation()执行时,线程列表可能已被垃圾收集.此外,我已经看到很多建议,以避免任何代码引用Finalize实现中的托管资源,尤其是实例字段.
此外,听到有关此问题的不同方法会很有趣.谢谢!
我有一个应用程序,我的用户可以拥有一组首选项.两者都存储为ActiveRecord模型,如下所示:
class User < AR::Base
has_one :preference_set
end
class PreferenceSet < AR::Base
belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)
我现在可以访问用户的首选项:
@u = User.first
@u.preference_set => #<PreferenceSet...>
@u.preference_set.play_sounds => true
Run Code Online (Sandbox Code Playgroud)
但是,这是否偏好设置尚未创建,因为@ u.preference_set将返回nil我将调用失败,play_sounds上nil.
我想归档的是User.preference_set总是返回一个PreferenceSet实例.我试过像这样定义它:
class User < ..
has_one :preference_set
def preference_set
preference_set || build_preference_set
end
end
Run Code Online (Sandbox Code Playgroud)
这导致a 'Stack level too deep',因为它以递归方式调用自身.
我的问题是:
如何确保@user.preference_set返回相应的preference_set-record,如果不存在则返回构建新的记录?
我知道我可以重命名我的关联(例如preference_set_real)并以这种方式避免递归调用,但为了我的应用程序的简单性,我想保留命名.
谢谢!
现代公司用什么来编译和链接他们的项目?
特别是对于大型项目,makefile似乎不足以实现可扩展性.据我所知,许多公司在现有构建系统之上使用内部构建系统或内部脚本.
大型项目是否使用make?是纯粹的Ant,Maven等使用还是用一些脚本包装?
不久之前,我在正则表达式中看到过(至少在PHP中)你可以通过前置来捕获捕获组?:.
$str = 'big blue ball';
$regex = '/b(ig|all)/';
preg_match_all($regex, $str, $matches);
var_dump($matches);
Run Code Online (Sandbox Code Playgroud)
输出...
array(2) {
[0]=>
array(2) {
[0]=>
string(3) "big"
[1]=>
string(4) "ball"
}
[1]=>
array(2) {
[0]=>
string(2) "ig"
[1]=>
string(3) "all"
}
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我不关心括号中匹配的内容,所以我附加了?:('/b(?:ig|all)/')并得到了输出
array(1) {
[0]=>
array(2) {
[0]=>
string(3) "big"
[1]=>
string(4) "ball"
}
}
Run Code Online (Sandbox Code Playgroud)
这非常有用 - 至少我是这么认为的.有时你只是不想让你的比赛混乱不必要的值.
我试图查找文档和正式名称(我称之为非捕获组,但我想我之前已经听过).
作为符号,谷歌似乎很难.
我还看了一些正则表达式参考指南,没有提及.
被?括号括起来并出现在括号内的第一个字符中会让我相信它与前瞻或外观有关.
那么,这些的正确名称是什么,我在哪里可以了解更多?
我是JS的初学者.我的问题是我们是否总是需要使用浏览器来测试JS代码?是否有可用的命令提示符编译器/解释器?
我有一个很长的NSString我想在几页上显示.
但要做到这一点,我需要找出页面上实际适合的文本数量.
[NSString sizeWithFont:...]是不够的,它只会告诉我文本是否适合矩形,如果没有,它会默默地截断字符串,但它不会告诉我它被截断的位置!
我需要知道第一个不适合页面的单词,所以我可以分割字符串并在下一页上绘制它的那一部分.(并重复)
任何想法如何解决这个问题?
到目前为止我唯一的想法就是重复调用sizeWithFont:constrainedToSize:在字符串中我猜测分页符的位置,并分析得到的矩形,但感觉很麻烦和缓慢,我觉得我可能有使其100%准确的其他问题...(因为下降,等等.)
ofc,它必须在公共iOS SDK中可用
回答:
Phew,这是一些毛茸茸的文件.这是我完成的功能作为一个例子,也许它会帮助某人,因为那里没有太多特定于iphone的核心文本示例.
+ (NSArray*) findPageSplits:(NSString*)string size:(CGSize)size font:(UIFont*)font;
{
NSMutableArray* result = [[NSMutableArray alloc] initWithCapacity:32];
CTFontRef fnt = CTFontCreateWithName((CFStringRef)font.fontName, font.pointSize,NULL);
CFAttributedStringRef str = CFAttributedStringCreate(kCFAllocatorDefault,
(CFStringRef)string,
(CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys:(id)fnt,kCTFontAttributeName,nil]);
CTFramesetterRef fs = CTFramesetterCreateWithAttributedString(str);
CFRange r = {0,0};
CFRange res = {0,0};
NSInteger str_len = [string length];
do {
CTFramesetterSuggestFrameSizeWithConstraints(fs,r, NULL, size, &res);
r.location += res.length;
[result addObject:[NSNumber numberWithInt:res.length]];
} while(r.location < str_len);
// NSLog(@"%@",result);
CFRelease(fs);
CFRelease(str);
CFRelease(fnt);
return result;
}
Run Code Online (Sandbox Code Playgroud)
重要的提示:
您不能将返回的范围或大小与任何UIKit类或字符串绘制函数一起使用!您只能将它与Core Text一起使用,例如创建CTFrame并绘制它.像字距调整这样的细微差别使得无法将Core Text函数与UIKit结合起来. …