小编Joe*_*oey的帖子

什么是分布式缓存?

我对分布式缓存的概念感到困惑.我有点知道谷歌搜索是什么.分布式缓存可以跨越多个服务器,以便它可以在大小和事务容量上增长.但是,我真的不明白它是如何工作的或如何分配数据.

例如,让我们说,我们有数据1,2,3,4,5,6,7,8,9,10二级缓存服务器A和B.如果我们使用分布式缓存,那么可能的解决方案之一是数据1,3,5,7,9存储在缓存服务器A中,并且2,4,6,8,10存储在缓存服务器B中.

这是正确的还是我误解了它?

第二个问题是我经常听到服务器节点这个词.它是什么?在上面的例子中,服务器A是服务器节点,对吗?

第三个问题,如果服务器(假设服务器A)出现故障,我们可以做些什么呢?我的意思是如果上面的例子是正确的,当服务器A关闭时,我们无法从缓存中获取数据1,3,5,7,9,那么在这种情况下缓存服务器可以做什么?

caching concept

50
推荐指数
2
解决办法
3万
查看次数

接口内部的枚举实现 - Java

我有一个关于在界面中放置Java枚举的问题.为了更清楚,请参阅以下代码:

public interface Thing{
   public enum Number{
       one(1), two(2), three(3);
       private int value;
       private Number(int value) {
            this.value = value;
       }
       public int getValue(){
        return value;
       }
   }

   public Number getNumber();
   public void method2();
   ...
}
Run Code Online (Sandbox Code Playgroud)

我知道接口包含空体的方法.但是,我在这里使用的枚举需要一个构造函数和一个方法来获取相关的值.在此示例中,建议的接口不仅包含具有空体的方法.是否允许此实施?

我不确定是否应该将enum类放在接口或实现此接口的类中.

如果我将枚举放在实现此接口的类中,那么public Number getNumber()方法需要返回枚举类型,这将迫使我在接口中导入枚举.

java enums enumeration interface

31
推荐指数
2
解决办法
5万
查看次数

实现用户登录系统的正确方法

我想创建一个用户登录系统,以便学习.我有几个问题.

我做了一些研究,发现实现用户登录系统的正确方法是在数据库中存储用户名/ id和密码的加密/散列版本.当用户登录时,密码在客户端加密(MD5,SHA-1等)并发送到服务器,并与数据库中的密码进行比较.如果匹配,则用户成功登录.

此实现可防止DBA或程序员在数据库中看到密码的明文.它还可以防止黑客在传输过程中拦截真实密码.

这是我困惑的地方:

  1. 如果黑客知道密码的哈希/加密版本(通过黑客入侵数据库)或DBA,程序员只需简单地读取数据库中的文本即可获得密码的哈希版本.然后,他们可以轻松地创建一个程序,将这个哈希版本的密码发送到服务器,允许他们成功登录.如果他们可以这样做,加密密码似乎不是很有用.我想我在这里误解了一些东西.

  2. 这是(我上面描述的方式)实现用户登录功能的最流行方式吗?它是否遵循当前的最佳做法?我是否必须手动完成所有操作,或者某些数据库是否具有执行相同操作的内置功能?是否有最常用的方法/方法为网站或网络应用程序执行此操作?如果是这样,请向我提供详细信息.

  3. 我以前的公司使用couchDB存储用户登录信息,包括密码.他们没有对加密方面做太多的事情.他们说couchDB会自动加密密码并将其存储在文档中.我不确定这是否安全.如果是这样,那对程序员来说非常方便,因为它节省了大量的工作.

  4. 这种方式(第3点)是否足以保证正常使用?其他数据库系统如mySQL有这种能力可以做同样的事情吗?如果是这样,是否意味着使用mySQL内置方法足够安全?

我不是在寻找一种非常安全的实现用户登录功能的方法.我更愿意为大多数Web应用程序寻找一种流行,易于实现,正确,安全的方法.请给我一些建议.提供的详细信息将非常感谢.

authentication authorization login logonserver password-encryption

15
推荐指数
2
解决办法
1万
查看次数

Java Switch语句

我在尝试处理特殊情况时使用switch语句时遇到问题.例如,我有3个案例:A,B,C.

  • 对于A,我想做statement_1和statement_3.
  • 对于B,我想做statement_2和statement_3.
  • 对于C,我什么都不想做

如果我使用if-else语句,它将如下所示:

 if ( not C){
    do statement_3

   if B
      do statement 2
   else if A
      do statement 1

 }
Run Code Online (Sandbox Code Playgroud)

如果我想使用switch语句做同样的事情,我有一些麻烦.

switch (variable){
case A:  do statement_1
case B: do statement_2
// how to do statement 3 here?  
}
Run Code Online (Sandbox Code Playgroud)

我试图避免重复的代码.所以我在想如何使代码尽可能简单.

更新1:

  1. 为了使我的代码/问题更清晰,我只是想让我的代码尽可能简单/清晰,这就是为什么我想使用switch语句而不是if-else.另外,我听说switch语句通常比if-else快.(虽然我不是100%肯定).

  2. 我想使用switch-case,因为案例A,B,C是枚举类型.它们不是变数.对此感到抱歉.

  3. 每个语句都超过10行代码.这就是为什么我不想做以下事情:

    switch (enum variable) {
    case A:
      statement1
      statement3
     break;
    case B:
      statement2
      statement3
     break;
    
    Run Code Online (Sandbox Code Playgroud)

    }

java if-statement switch-statement

14
推荐指数
1
解决办法
3万
查看次数

什么是Java中最快的子字符串搜索方法

我需要实现一种使用Java在字符串(haystack)列表中搜索子字符串(针)的方法.

更具体地说,我的应用程序有一个用户配置文件列表.如果我输入一些字母,例如"Ja",然后搜索,则所有名称中包含"ja"的用户都应该显示.例如,结果可能是"Jack","Jackson","Jason","Dijafu".

在Java中,据我所知,有3种内置方法可以在字符串中查看搜索子字符串.

  1. string.contains()

  2. string.indexOf()

  3. 正则表达式.它类似于string.matches("ja"))

我的问题是: 上面每种方法的运行时间是多少?哪一个是检查字符串列表是否包含给定子字符串的最快或最有效或最流行的方法.

我知道存在一些做同样事情的算法,如Boyer-Moore字符串搜索算法,Knuth-Morris-Pratt算法等.我不想使用它们,因为我只有一小串字符串,我认为使用它们对我来说有点矫枉过正.此外,我必须为这种非内置算法输入许多额外的编码.如果您认为我的想法不正确,请随时纠正我.

java regex search search-engine substring

12
推荐指数
3
解决办法
2万
查看次数

如何在jsp文件中使用<c:if>.eclipse说它是未知的标签

我想在.jsp文件中编写一个简单的网页.我需要使用<c:if>标签.但它不被承认.eclipse说它是未知的标签.

我用谷歌搜索了一些说我需要包含标准的lib(这是JSTL?).

我只想在jsp文件中使用一些基本标签,如<c:if>.我真的需要包含任何库吗?如果是这样,我需要包含哪些库?如何在Eclipse中做到这一点?请逐步告诉我如何导入/包含这些库或构建路径,以便我可以<c:if>在我的jsp文件中使用.

jsp jstl jsp-tags jspinclude

11
推荐指数
2
解决办法
2万
查看次数

Java的文件路径或文件位置 - 新文件()

我的项目有以下结构.

在Eclipse中:

myPorjectName
  src
    com.example.myproject
        a.java
    com.example.myproject.data
        b.xml
Run Code Online (Sandbox Code Playgroud)

a.java,我想读取b.xml文件.我怎样才能做到这一点?具体来说,a.java我使用了以下代码:

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse (new File("data/b.xml"));
Run Code Online (Sandbox Code Playgroud)

这段代码找不到b.xml.但是,如果我将路径更改为src/com/example/myproject/data/b.xml然后它可以工作.当前位置似乎位于我的项目文件的根目录中.

但我看到其他人的例子,如果b.xmla.java是在同一个文件夹中,那么我们可以直接使用new File("b.xml").但我尝试放入b.xml相同的文件夹,a.java而不是放入子文件夹,但它仍然无法正常工作.如果这样可行,那么在我的情况下,我应该可以使用new File("data/b.xml"),对吧?我真的不明白为什么这不起作用.

java file-io readxml file-location filepath

10
推荐指数
1
解决办法
8万
查看次数

PrintWriter或Java中的任何其他输出流不知道"\ r \n"

我无法使用PrintWriter或任何其他输出流在服务器和客户端程序之间发送消息.如果我使用println("abc")进行通信,它可以正常工作,但如果我使用print("abc\r \n"),print("abc \n")或print("abc\r \n")它就无法正常工作).我的意思是"它不起作用"是readLine()不会结束,因为它似乎没有看到"换行符"字符,它仍然在等待"\ r"或"\n"

为了更清楚,我将简单地在下面添加一些代码:客户端:

import java.net.*;
import java.io.*;

public class Server {
  public static void main(String[] args) throws IOException {

    ServerSocket serverSocket = null;
    try {
        serverSocket = new ServerSocket(1234);
    } catch (IOException e) {
        System.err.println("Could not listen on port: 1234.");
        System.exit(1);
    }

    Socket clientSocket = null;
    try {
        clientSocket = serverSocket.accept();
    } catch (IOException e) {
        System.err.println("Accept failed.");
    }
    System.out.println("Connected");


    PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
    BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

    String textFromClient;
    textFromClient = in.readLine(); …
Run Code Online (Sandbox Code Playgroud)

java sockets client-server readline printwriter

5
推荐指数
1
解决办法
2万
查看次数

JDBC4插入日期"0001-01-01"

我想使用Java 将"0001-01-01"作为值插入到日期字段中PreparedStatement.

但是当我尝试这个时它抛出异常:

String sql = "insert into mytable values(?)"
ps = conn.prepareStatement(sql);   
ps.setDate(1, java.sql.Date.valueOf("0001-01-01"));
ps.executeUpdate(); // throws exceptions here.
Run Code Online (Sandbox Code Playgroud)

错误是:

提供的值不是数据类型datetime的有效实例.检查源数据中的无效值.无效值的示例是具有大于精度的比例的数字类型的数据.

  • 如果我不使用PreparedStatement,我可以插入"0001-01-01".但是,prepare语句似乎不允许我插入此值.

  • 如果我插入"1969-01-01"而不是"0001-01-01",它将起作用.

有任何想法吗?

更新: 以下是可能需要的更多信息.

  1. 我们使用sql server 2012.
  2. 我们必须使用"0001-01-01",因为这些值已经存在.我正在更改一些非常旧的代码以使用prepare语句.所以我必须在相同的功能中插入相同的值.

更新2:

另外,我可以在不使用prepare语句的情况下在日期字段中插入"0001-01-01".即

   String sql = "insert into mytable values('0001-01-01')"
   java.sql.Statement statement = conn.createStatement();
   statement.executeUpdate(sql);
Run Code Online (Sandbox Code Playgroud)

所以这不是sql server的问题或db字段的问题.

java sql-server date jdbc prepared-statement

5
推荐指数
1
解决办法
1032
查看次数

GWT如何制作由2种单元格组成的复合单元格或如何使用图像和文本制作自定义单元格

我想在包含图像+文本的celltable/datagrid中添加一列.我只是做了一些研究,发现可能有3种方法可以做到这一点.

  1. 制作一个ImageResourceCell和一个TextCell,然后将它们组合成一个复合单元格.(没有看到任何例子或参考,它只是出自我的想法.也许这不起作用)

  2. 使用IconCellDecorator.我检查了文档.它说"一个细胞装饰器将图标添加到另一个细胞".不确定它是否可以做我想要的.我仍然没有找到任何关于它的例子.

  3. 制作自定义单元格.有一个关于在GWT官方网站上梳理颜色名称和颜色样式的例子.我厌倦了这种方式来组合图像和字符串.但它没有用.也许我的代码有问题,因为我不完全理解代码.

任何人都可以提供一些实现这一点的例子.你可以做任何你知道的方式.只需键入一些代码并向我展示示例.

非常感谢.

最好的祝福

gwt datagrid custom-cell gwt-2.2-celltable gwt-celltable

2
推荐指数
1
解决办法
3632
查看次数

GWT如何将自定义单元格添加到celltable/datagrid

我已经渲染了一个自定义单元格,它结合了图像和文本.它看起来像这样:

   class ImageTextCell extends AbstractCell<String> 
Run Code Online (Sandbox Code Playgroud)

我的问题是如何将此单元格添加到celltable/datagrid中.我已经厌倦了.

  Column<Message, String> iconColumn = new Column<Message, String>(new ImageTextCell())
            {
        @Override
        public String getValue(Message versionStatus) {

            return ? // I dont know what to type here. How to return the ImageTextCell object           }
    };
Run Code Online (Sandbox Code Playgroud)

gwt datagrid cell custom-cell gwt-celltable

2
推荐指数
1
解决办法
4121
查看次数

引导3崩溃面板中的Jquery Datatable响应式插件

在引导程序3折叠面板中放置Jquery Datatable(带有自己的响应式插件)时发现了一个问题.

以下是有效的示例:http: //jsfiddle.net/Wc4xt/1804/

以下是不起作用的示例:http: //jsfiddle.net/Wc4xt/1803/

我发现的问题是,

  • 如果包装表的面板在开始时折叠,即设置包装div如下: <div id="collapseOne" class="panel-collapse collapse">,当我调整浏览器大小时,表的列不会折叠.

  • 如果包装表的面板在开始时折叠,即如果我要么从类中删除"崩溃",即<div id="collapseOne" class="panel-collapse">,或者将"in"添加到其类中,即 <div id="collapseOne" class="panel-collapse collapse in">表格工作正常.窗口调整大小时,列可以折叠.

但是,我希望折叠面板默认关闭.因此,我必须在没有"in"类的情况下向类中添加"collapse".

我还检查了bootstrap源代码,

.collapse {
  display: none;
}
.collapse.in {
  display: block;
}
Run Code Online (Sandbox Code Playgroud)

我已经花了几天时间仍然无法理解为什么课程"崩溃"会导致这个问题.

谢谢大家.

javascript jquery twitter-bootstrap twitter-bootstrap-3 jquery-datatables

2
推荐指数
1
解决办法
3014
查看次数

SQL - 如果第一个选择行返回空,则选择另一行

我正在使用SQL服务器.我有下表

Name   Number
A      123
B      456
C      789
D      000
Run Code Online (Sandbox Code Playgroud)

我有两个名字.我想编写一个sql语句,以便我可以选择检查表中是否存在第一个给定的名称.

  • 如果是这样,则sql返回具有第一个名称的行.
  • 如果没有,它将检查第二个名称.如果找到具有第二个名称的行,则返回该行.
  • 如果找不到两个名称,则返回空

例如,

  • 如果给出'A','C',则sql语句应该只返回名为'A'的行.
  • 如果给出'G','B',它应首先检查'G'但未找到,然后返回名称为'B'的行,因为找到了它.
  • 如果给出"X","Y",那么它应该返回空行

实现它的最有效但通用的SQL语句是什么?(我的意思是"泛型"是我想编写一个适合大多数Retional SQL DB而不仅仅是SQL服务器的sql语句)

提前致谢!

更新: 我的意思是说"空行"时返回"无行".我为我不正确的措辞道歉.

sql sql-server jdbc sql-server-2008

0
推荐指数
1
解决办法
251
查看次数