我是XCode的新手,我发现文件管理非常痛苦.在大多数IDE中,您只需让项目源树引用磁盘上的目录结构即可.这样可以轻松地将新文件添加到项目中 - 您只需将它们放在磁盘上,它们就会自动编译.
使用XCode,似乎我必须创建文件并单独将其添加到项目中(或者被迫通过UI操作文件系统).但这意味着通过源代码控制共享.xcodeproj充满了问题 - 通常,我们会在xcodeproj文件上出现合并冲突 - 当我们不这样做时,我们经常会遇到链接器错误,因为在合并期间会出现一些文件在项目中列出的被删除.所以我必须将它们重新添加到项目文件中,直到我可以编译它,然后重新检查项目文件.
我相信我必须在这里遗漏一些东西.我尝试使用'参考文件夹',但其中的代码似乎没有被编译.构建一个强制每个人在向项目添加或删除文件时修改单个共享文件的IDE似乎很疯狂.
任何人都可以详细解释在我的测试代码中print(Parent parent)使用Child实例时调用重载方法的原因吗?
这里涉及到Java中的任何虚拟方法或方法的重载/解决方案?有没有直接引用Java Lang Spec?哪个术语描述了这种行为?非常感谢.
public class InheritancePlay {
public static class Parent {
public void doJob(Worker worker) {
System.out.println("this is " + this.getClass().getName());
worker.print(this);
}
}
public static class Child extends Parent {
}
public static class Worker {
public void print(Parent parent) {
System.out.println("Why this method resolution happens?");
}
public void print(Child child) {
System.out.println("This is not called");
}
}
public static void main(String[] args) {
Child child = new Child();
Worker worker = …Run Code Online (Sandbox Code Playgroud) 我在哪里可以找到javax.crypto源代码?
--update 感谢OpenJdk版本,但是jdk6版本怎么样?
我有以下字段和构造函数:
private final Properties properties;
public PropertiesExpander(Properties properties) {
this.properties = properties;
}
Run Code Online (Sandbox Code Playgroud)
好的做法是在构造函数中复制每个可变集合.我想制作一份浅薄的独立副本.我怎样才能做到这一点?
我的第一个想法是使用putAll()方法:
private final Properties properties = new Properties();
public PropertiesExpander(Properties properties) {
this.properties.putAll(properties);
}
Run Code Online (Sandbox Code Playgroud)
有没有更简单,更高效或更惯用的方式呢?也许在Guava或Apache Commons中有一些实用工具?
我在这里看一下优秀的Clojure教程.在其中一个示例中,它具有以下行的Clojure代码:
(def vowel? (set "aeiou"))
Run Code Online (Sandbox Code Playgroud)
这使元音的元音返回true,辅音返回false:
(vowel? (first "abc")) ; => true
(vowel? (first "cba")) ; => false
Run Code Online (Sandbox Code Playgroud)
为什么是这样?我假设它与变量名后面的问号有关.在教程中找不到任何东西......
编辑我刚刚意识到vowel?不会返回true或false,而是返回元素本身或者nil.看看我自己的答案.
是否有一些免费工具(最好是基于命令行),你可以给你的根源目录,它会检查所有文件和子文件夹,并生成一组漂亮的"统计"?例如代码行,类的数量等?
当我们询问有关他们的信息时,CKFinder或其背后的人一直非常模糊他们的许可证,因此我们并不真正喜欢使用他们的商业许可产品.
所以我找了一个替代品,找到了http://kcfinder.sunhater.com,它带有LGPL许可证,非常适合在商业应用程序中使用,只想使用文件浏览器而不是修改它.
现在他们看起来非常相似,我的问题是:KCfinder是CKfinder的合法替代品吗?或者它是一个精确和修改过的副本?
有谁知道这个或者能找到这个吗?
注意:我的目标关注点是使用常规MSIL定位CLR的C#,以防有些内容适用于此但不是更常见的情况.
最近发布了Sourcepack项目,该项目允许用户重写pdb文件中的源路径以指向不同的位置.当您拥有程序集的源代码时,这非常有用,但不希望尝试将其放入与构建时完全相同的文件系统位置.
http://lowleveldesign.wordpress.com/2011/08/26/sourcepack-released/
对于开源项目,使用http://www.symbolsource.org/作为简化项目用户获取符号和来源的方法是一个很好的主意.
但是,由于法律或方便的原因,使用这种方法的项目通常不太可行.此外,可能正在调试项目的人员组可能相对较小或包含在内.
默认情况下,项目的pdb包含指向磁盘上文件的指针(IIRC),然后源索引可以添加嵌入源位置指针的功能(例如,在版本控制系统中),然后使用源服务器指向实际获取源的指针.
看起来事情可能更简单(对于某些构建,例如调试和/或仅内部),只需将实际源放入pdb(实际上只是取消引用当前在PDB中写入的指针).看起来你可以跳过整个源服务器部分(至少在理论上)并消除对调试时故事的一些依赖.是否将源存储为压缩源在很大程度上是正交的,但是为了使现有调试器的实现更简单,第一遍可能不会这样做.
由于PDB匹配二进制故事已经非常好,因此将源放入PDB甚至比源服务器指针更好,因为指针可能会随着时间的推移而中断(源控制系统移动或更改为不同的系统,或者无论如何,但坐在PDB中的实际来源是"永远".
(这是在Tigran评论之后通过编辑添加的,询问有什么好处)
应该与之进行比较的"基线"场景是使用当今"普通"源服务器实例的"正常"调试体验.在那种情况下,(AFAIK)调试引擎从PDB获取指针(通过备用流),然后使用注册的源服务器尝试通过该指针获取源.由于给定的程序集通常包含多个源文件,因此有一个指针包含一个基本位置,或者PDB中有多个指针(或其他内容),但这应与此讨论正交.
对于保持源隐藏/不可访问的项目(大多数Microsoft产品,例如,包括Windows,Office,Visual Studio等),然后让PDB包含指针,FAR优于包括实际源(即使它是加密).没有必要的网络访问和权限,这样的指针毫无意义,所以这种方法意味着您可以将PDB发送给地球上的任何人,而不必担心他们能够访问您的来源(最糟糕的情况是,他们可以看到您的来源如何树的安排,我想).
但是,有两大组项目(特别是构建),其中"隐藏源"的好处不存在.
第一个是仅供有权访问源的人使用的构建.在你自己的机器上完成不会离开那台机器的构建就是一个很好的例子,因为攻击者无论如何都需要从你的文件系统中读取文件以获取源代码,因此从一个文件(.cs)读取另一个文件(. pdb)在攻击难度/向量方面是一个相对较小的差异.类似地,完成并推送到测试/暂存环境的构建,其中访问机器上的pdb的人员等于或者可以正常访问源的人员的子集.
第二个(有点明显)是开源项目,项目的来源无论如何都已经开放给所有人,因此隐藏任何人的来源没有任何好处.
请注意,这可以相对容易地扩展,以包括加密形式的源(因为我们已经在讨论必须存储格式/编码数据),但增加的复杂性将使这种情况可能不太有用而不仅仅是使用'普通'源服务器.
通过上面的描述,允许这一点的潜在好处列表包括(但不限于:)这些当下突然出现在我的脑海中:
注意:另一种方法是在实际程序集中包含源代码(例如,作为资源),但pdb是一个更好的选择(很容易发布没有pdb的构建,如果源代码在pdb中,则没有正常的运行时性命中因为程序集是相同的代码和相同的大小等)
从表面上看,这种支持看起来似乎不太难添加,但我觉得这是因为我对所涉及的机制并不是很了解,而不是实际上是一件简单的事情.实施.:)
我的猜测将是:
随着上面的喋喋不休,问题实际上是:
我使用过滤器来检查登录用户的URL模式.
但是我需要过滤许多URL模式.
{ "/table/*", "/user/*", "/contact/*", "/run/*", "/conf/*", ..., ..., ...}
Run Code Online (Sandbox Code Playgroud)
它变得不可维护.排除以下内容会更简单:
{ "/", "/login", "/logout", "/register" }
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
@WebFilter(urlPatterns = { "/table/*","/user/*", "/contact/*","/run/*","/conf/*"})
public class SessionTimeoutRedirect implements Filter {
protected final Logger logger = LoggerFactory.getLogger("SessionFilter");
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
if (request.getSession().getAttribute("Id") != null) {
chain.doFilter(req, res);
} else {
logger.debug("session is null:"+request.getRequestURL());
response.sendRedirect(request.getContextPath()+"/login");
}
}
@Override
public void init(FilterConfig arg0) …Run Code Online (Sandbox Code Playgroud) java ×4
.net ×1
c# ×1
ckfinder ×1
clojure ×1
collections ×1
copy ×1
cryptography ×1
debugging ×1
folding ×1
ide ×1
oop ×1
overloading ×1
pdb-files ×1
project ×1
properties ×1
servlets ×1
statistics ×1
upload ×1
url-pattern ×1
xcode ×1
xcode3.2 ×1