在比较C++和Java多重继承时,我有些疑惑.
即使Java通过接口使用多个多级继承 - 但为什么它不像C++那样使用虚拟基类之类的东西?是因为java接口的成员在内存中确保了一个副本(它们是公共静态final),并且这些方法只是声明而没有定义?
除了节省内存之外,C++中还有其他虚拟类的使用吗?如果我在多重继承程序中忘记使用此功能,是否有任何警告?
这个有点哲学 - 但为什么C++开发人员没有把它作为默认制作每个基类,虚拟?提供灵活性的需求是什么?
将举例说明.谢谢 !!
在最近的一次采访中,我被问到:
开源Web应用程序(比如建立在Struts/Spring上)更容易被黑客攻击,因为任何人都可以访问源代码并进行更改.你怎么防止它?
我的回答是:
java源代码不能直接访问.它被编译成类文件,然后将它们捆绑在war文件中,并部署在像Weblogic app server这样的安全容器中.应用服务器位于公司防火墙后面,无法直接访问.
那时候 - 我没有提到任何关于XSS和SQL注入的内容,它们会影响类似于开源的基于COTS的Web应用程序.
我的问题:
a)我对这个问题的回答是否正确?
b)我可以在答案中添加哪些附加内容?
提前致谢.
编辑:
在我消化您的回复时 - 我还要指出这个问题也适用于Liferay和Apache OFBiz等框架.
我不是非常精通Mac OS X编程,但我正在开发一个需要有关存储设备信息的Qt应用程序.基本上是硬盘驱动器和USB拇指驱动器的列表.最终结果应该像一个向量,其中包含每个设备的以下信息:
string:标签
字符串:挂载点
字符串:设备描述(又名友好名称)
uint64:大小
bool:可移动吗?
我一直在Windows上和以下帖子中获取有关磁盘驱动器结果的信息在windows7 - 32位系统上提供了很大的帮助.但是,虽然我非常精通C/C++,但我在Mac OS X编程,Cocoa和/或Objective-C方面并不是很好,所以任何帮助都会非常感激.
当我尝试关闭emacs时,我收到了消息
"缓冲ido.last修改;杀死无论如何?"
无论我回答什么,emacs都会保持开放状态.但我无法打开此缓冲区并且ido.last文件不存在.如何关闭我的emacs?
有人能解释一下Java中引入泛型的原因吗?
据我所知,它们的介绍使您不会意外地将错误类型的对象添加到集合中.
我有点像收集的泛型,但不知道为什么它们也被添加到其他类.我见过一些让你的头部疼痛,眼睛流血的通用课程.
那么泛型的所有原因是什么(主要是非收集)?
TIA!
我想在C#和VB.NET中得到建议
我有两个表Employees和CafeLogs.一些员工可以是收银员,也可以是咖啡店的顾客.
表结构:
表关系:
员工表数据:
EmployeeId,FirstName,LastName
5,布朗,雷克萨斯
CafeLogs表数据:
LogId,CashierId,EmployeeId,Value
通缉结果:我想从一个查询中显示出这样的收银员名称和员工姓名:
7,Steven Gerald,Lours John,1
现在我知道如何只选择LogId,员工的姓名和Value,而不是Cashier名称.
Dim query = From log In db.CafeLogs _
Join emp In db.Employees On emp.EmployeeId Equals log.EmployeeId _
Select log.LogId, emp.FirsName, emp.LastName, log.Value
Run Code Online (Sandbox Code Playgroud)我在购物车项目中删除会话数组中的项目时遇到问题.以下代码应采用所选项目并将其从会话中删除.然而,最终结果与之前的会话相同,没有删除任何内容.我通过谷歌搜索看到了类似的问题,但还没有找到可行的解决方案.这是精简代码:
<?php
session_start();
$removeditem = $_GET['item']; // this identifies the item to be removed
unset($_SESSION['stuff'][$removeditem]); // "stuff" is the existing array in the session
?>
Run Code Online (Sandbox Code Playgroud)
以下是print_r为以下内容提供的内容(使用"7"作为已删除项目的示例):
$removeditem:
7
$_SESSION['stuff'] (before and after removal)
Array
(
[0] => 7
[1] => 24
[2] => 36
)
Run Code Online (Sandbox Code Playgroud)
我错过了一些明显的东西吗
假设我有一个带有itemsource绑定到属性Collection的datagrid,例如IEnumerable.当然我为它写了适当的getter和setter.
现在,当我分配给这个属性(Collection)时只是IEnumerable(作为某种方法的结果),如:
Collection = FooMethod(); // FooMethod returns IEnumerable<MyClass>
Run Code Online (Sandbox Code Playgroud)
datagrid将显示空行.行的计数将与Collection的计数匹配.
但当我强制转换时,像这样:
Collection = FooMethodp().ToArray(); // forced fetching data
Run Code Online (Sandbox Code Playgroud)
datagrid现在将显示包含内容的所有行.
那么什么阻止数据网格在纯IEnumerable的情况下显示数据呢?它必须迭代一个集合,所以无论如何都要进行提取.
仅供记录.MyClass是这样的:
public class ErrorsIndicators
{
public double Min { get; set; }
public double Max { get; set; }
public double Avg { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和FooMethod返回(返回yield)几个项目.所以,这里没什么特别的.
我想知道LINQ方法是否喜欢.Last和.Skip针对数组进行优化List<T>等等.例如,对于一个数组,我可以做到_array[_array.Length - 1]最后一个元素.是否_array.Last()实际上是通过所有的元素一一列举,然后返回最后还是有其实内置了一些优化?
如果没有,可能不得不放弃表现.
我有两节课.一个(Person)用于getter和setter,另一个(People)用于计算数据.我的情况是,我从数据库中获取数据ResultSet,然后创建一个人对象来存储行数据.然后我创建了人物对象来存储所有人.
每个对象创建为SET.
while(rs.next())
{
Set<People> people = new HashSet<people>();
Person person = new Person();
String name = rs.getString(2);
person.setName(name);
int id = rs.getInt(1);
person.setId(id);
String dept = rs.getString(4);
person.setDept(dept);
int age = rs.getInt(3);
person.setAge(age);
people.add(person);
}
return people;
Run Code Online (Sandbox Code Playgroud)
现在问题是While循环中的最后一行 people.add(person);
它说
类型Set中的方法add(People)不适用于参数(Person)
我怎样才能克服这个问题?
谢谢.