SQL Server是否允许事务修改另一个事务当前正在修改但尚未提交的数据?在任何隔离级别下都可以做到这一点,比如说“读未提交”,因为这是限制性最低的吗?还是完全阻止了这种情况的发生?如果可能的话,您会称之为“脏写”吗?
我已经阅读了这个答案中讨论的 Git 文档(LF 将被 git 中的 CRLF 取代 - 那是什么,它很重要吗?)但我不明白这对我的情况意味着什么。
我有 LF 文件,这些文件是由工具引入到我在 Windows 上的 git checkout 中的。当我尝试提交它们时,我收到了警告warning: LF will be replaced by CRLF in [file]。
git config core.autocrlf在这台机器上是真的。反正我答应了。Windows 上的行尾仍然是 LF。然后我在git config core.autocrlf似乎没有设置的 Linux 机器上检查了该文件。我检查了那里的行尾,它们也是 LF。
所以我不明白的是,哪里说LF将被CRLF取代?这是否意味着,下次我对文件进行更改(由另一台机器上的某人提交)时,行尾将被转换?
另外 - Git 在其内部存储库中使用什么行结尾?
我在https://docs.oracle.com/javase/7/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html中阅读了有关结束线程的方法,这是我从问题How do you kill a Java中的线程?
在第一个链接中,他们首先讨论使用volatile变量向要终止的线程发出信号。线程应该检查此变量并在变量具有表示停止的值时停止操作(例如,如果是null)。因此,要终止线程,您需要将该变量设置为null.
然后他们讨论添加中断来帮助处理长时间阻塞的线程。他们给出了以下 stop() 方法示例,该方法将 volatile 变量(waiter)设置为 null,然后还引发中断。
public void stop() {
Thread moribund = waiter;
waiter = null;
moribund.interrupt();
}
Run Code Online (Sandbox Code Playgroud)
我只是想知道,为什么你需要两者?为什么不只使用interrupt(),然后正确处理呢?这对我来说似乎是多余的。
我正在查看一个使用 Jetty 的应用程序,它有很多不同的相关对象:
service = new Server(Integer.valueOf(System.getenv("PORT")));
final ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
MyAppServlet myAppServlet = new MyAppServlet();
ServletHolder myAppServletServletHolder = new ServletHolder(myAppServlet);
final String serviceName = 'abc';
servletContextHandler.addServlet(myAppServletServletHolder, ("/"+ serviceName));
service.setHandler(servletContextHandler);
Run Code Online (Sandbox Code Playgroud)
所以看起来层次结构是:
Server
ServletContextHandler
ServletHolder
Servlet
Run Code Online (Sandbox Code Playgroud)
Server的含义很明显,Servlet似乎就是实现实际应用程序的脚本。
但 ServletContextHandler 的含义不太清楚。您能否给出一个简单的解释,不需要太多 Java 生态系统的背景,只需要一般的编程经验?是为了在不同的应用程序(servlet)之间共享配置变量吗?它有哪些有用的应用?
最后,我不知道为什么我们需要 ServletHolder 而不是仅仅将 Servlet 提供给 ServletContextHandler。
以下内容有点相关,但我认为不是很仔细。它只有一个类与这个问题重叠:What's the Difference Between a ServletHandler and a ServletContextHandler in Jetty?
我正在阅读 O'Reilly的Spark: The Definitive Guide book,当我尝试执行简单的 DataFrame 操作时遇到错误。
数据是这样的:
DEST_COUNTRY_NAME,ORIGIN_COUNTRY_NAME,count
United States,Romania,15
United States,Croatia,1
...
Run Code Online (Sandbox Code Playgroud)
然后我用(在 Pyspark 中)阅读它:
flightData2015 = spark.read.option("inferSchema", "true").option("header","true").csv("./data/flight-data/csv/2015-summary.csv")
Run Code Online (Sandbox Code Playgroud)
然后我尝试运行以下命令:
flightData2015.select(max("count")).take(1)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
pyspark.sql.utils.AnalysisException: "cannot resolve '`u`' given input columns: [DEST_COUNTRY_NAME, ORIGIN_COUNTRY_NAME, count];;
'Project ['u]
+- AnalysisBarrier
+- Relation[DEST_COUNTRY_NAME#10,ORIGIN_COUNTRY_NAME#11,count#12] csv"
Run Code Online (Sandbox Code Playgroud)
我什至不知道“u”来自哪里,因为它不在我的代码中,也不在数据文件头中。我读到另一个建议,这可能是由标题中的空格引起的,但这在这里不适用。知道要尝试什么吗?
注意:奇怪的是,当我使用 SQL 而不是 DataFrame 转换时,同样的事情会起作用。这有效:
flightData2015.createOrReplaceTempView("flight_data_2015")
spark.sql("SELECT max(count) from flight_data_2015").take(1)
Run Code Online (Sandbox Code Playgroud)
我还可以执行以下操作,并且效果很好:
flightData2015.show()
Run Code Online (Sandbox Code Playgroud) 在Spark:权威指南中,它说:
如果需要引用特定DataFrame 的列,可以在特定DataFrame 上使用col 方法。
例如(在 Python/Pyspark 中):
df.col("count")
Run Code Online (Sandbox Code Playgroud)
但是,当我在包含一列的数据帧上运行后一个代码时count,出现错误'DataFrame' object has no attribute 'col'。如果我尝试,column我会收到类似的错误。
这本书是错的,或者我应该怎么做?
我在 Spark 2.3.1 上。数据框是用以下内容创建的:
df = spark.read.format("json").load("/Users/me/Documents/Books/Spark-The-Definitive-Guide/data/flight-data/json/2015-summary.json")
Run Code Online (Sandbox Code Playgroud) 我正在阅读 Docker 教程,但我有点困惑为什么容器可能具有与群中包含容器的节点不同的 IP 地址。我的困惑基于教程中此页面的下图。
较大的绿色框是群中的节点;它们每个都有自己的 IP 和负载均衡器,并且在外部监听端口 8080。我相信黄色框是服务中的容器/任务my-web。他们正在侦听端口 80,我猜该服务已设置为将每个容器的端口 80 映射到外部端口 8080。
我或多或少了解了这么多,但我不明白为什么容器/任务会/需要与其运行的节点不同的 IP 地址。有人能解释一下吗?
如果我不得不猜测,那是因为每个容器基本上都是一个虚拟机,虚拟机需要自己的 IP 地址,并且没有两个虚拟机可以具有相同的 IP 地址,因此容器不能与节点具有相同的 IP。但我不确定这个解释是否正确。
我是 GCP 新手,正在学习一些教程。在 Qwiklabs 教程 ( https://google.qwiklabs.com/focuses/558?parent=catalog ) 中,他们让我们设置一个托管实例组,将其指向目标池,然后创建一个负载均衡器并将其指向目标池。
我不明白的是为什么目标池是必要的。为什么我们不能将负载均衡器指向托管实例组?我猜随着经验的积累,这一点会变得更加明显,但我现在找不到这个问题的简单答案。
我正在尝试授予用户对 Google Cloud Storage 存储桶的读取权限。用户具有“存储对象查看者”角色
但用户看不到存储桶中的项目:
项目 ID 有效且根据文档,“存储对象查看者”角色包括 storage.buckets.list 权限(编辑:这是不正确的,请参阅https://cloud.google.com/storage/docs/access-control/iam-roles#standard-roles)。
如果我授予用户“存储对象管理员”角色,则该用户可以访问该存储桶,但他也具有写入权限。我如何授予读取权限?
google-cloud-storage google-cloud-console google-cloud-platform google-iam
使用 Google Cloud Storage 时面临的一个挑战是所有存储桶名称共享一个公共命名空间 - 不仅在您的组织中,而且在整个 Google Cloud 中。因此,有人可以扫描 Google Cloud 中当前使用的存储桶名称列表,并查看您在存储桶名称本身中写入的任何信息。我不确定存储桶名称是否可以连接回组织或项目,但这至少是一个中等的安全风险。(更多讨论请参见此处:GCS 存储桶名称的“全局”唯一性是什么?)
我的问题是 Google Cloud项目 ID和项目名称是否以及在多大程度上也是如此。项目 ID 是否也在整个 Google Cloud 中共享公共命名空间?有人能看到目前整个 Google Cloud 中正在使用哪些项目 ID 吗?
谷歌在这个页面上说:
请勿在项目名称、项目 ID 或其他资源名称中包含敏感信息。项目 ID 用于许多其他 Google Cloud 资源的名称中,对项目或相关资源的任何引用都会公开项目 ID 和资源名称。
但它并没有明确说明项目 ID 与其他 Google Cloud 用户共享命名空间。我可以将此警告解释为更基本的含义,例如“每当您在电子邮件或代码中包含 Google Cloud URN 时,它都会包含项目 ID,因此项目 ID 并不是真正的秘密。” 这将是一个风险,但不像项目 ID 共享全局命名空间那么大,因为仍然需要向某人显示 URN 才能查看项目 ID(他们不能只扫描所有项目 ID 的列表) )。
我对项目名称也有类似的问题。项目名称似乎更加保密,因为它们不用于链接(它们更像是项目 ID 的人类可读别名),但 Google 仍然警告不要将私人数据放入其中。我想知道这是为什么。
apache-spark ×2
java ×2
docker ×1
docker-swarm ×1
git ×1
google-iam ×1
jetty ×1
line-endings ×1
locking ×1
pyspark ×1
sql-server ×1
transactions ×1