根据我的理解,我使用下面给出的邻接表将Dijkstra算法的时间复杂度计算为big-O表示法.它没有像它应该的那样出来,这让我逐步理解它.
O(log(V)).E*logV.O(VElogV).但是Dijkstra算法的时间复杂度是O(ElogV).为什么?
例如,遍历顶点的每个相邻边的时间复杂度O(N),其中N是相邻边的数量.因此,对于V个顶点,时间复杂度变为O(V*N)= O(E),其中E是图中边的总数.由于从队列中删除和添加顶点是O(1),为什么它被添加到BFS的总体时间复杂度中O(V+E).
我正在测试下面给出的控制器
@Controller
public class MasterController {
@GetMapping("/")
public String goLoginPage(){
return "index";
}
}
Run Code Online (Sandbox Code Playgroud)
我下面这个春天文件来测试我的控制器.现在,我想通过实例化Web层而不是文档中给出的整个Spring上下文来测试我的控制器.下面是我的相同代码.
@RunWith(SpringRunner.class)
@WebMvcTest
public class MasterControllerTestWithWebLayer {
@Autowired
MockMvc mockMvc;
@Autowired
MasterController masterController;
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void testLoginHome() throws Exception{
mockMvc.perform(get("/"))
.andExpect(status().isOk())
.andExpect(view().name("index"));
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行此测试时,我收到错误Unable to find @SpringBootConfiguration,...etc.但我很困惑为什么当我们不希望它实例化它但只想使用Web层时它要求Spring配置.请指出正确的方向,这里发生了什么.以及如何解决这个问题.谢谢
从灵活性的角度来看,接口非常棒.但万一,大量客户端使用接口.在保持旧的mehtod完整性的同时向接口添加新方法将破坏所有客户端的代码,因为客户端中不会出现新方法.如下所示:
public interface CustomInterface {
public void method1();
}
public class CustomImplementation implements CustomInterface {
@Override
public void method1() {
System.out.println("This is method1");
}
}
Run Code Online (Sandbox Code Playgroud)
如果在某个时间点,我们在此接口中添加另一个方法,所有客户端的代码都会中断.
public interface CustomInterface {
public void method1();
public void method2();
}
Run Code Online (Sandbox Code Playgroud)
为避免这种情况,我们必须在所有客户端代码中明确实现新方法.
所以我认为接口和这个场景如下:
编辑:Default方法确实是Java接口的一个很好的补充,很多人在他们的答案中提到过.但我的问题更多的是在代码设计的背景下.如何在客户端上强制实现方法是接口的固有特性.但是,接口和客户端之间的这种合同似乎很脆弱,因为功能最终会发展.
我想维持一个List<Integer>大小<= 10 ^ 6 的有序.每次添加一个新元素时,我都会调用Collections.sort()方法对列表中的新元素进行排序.据我所知,ArrayList表现要好于LinkedList.但是由于我会sort()经常调用方法,所以我已经明白,linkedList在对列表进行排序时会表现得更好并且将是更好的选择ArrayList,因为没有像ArrayList(array作为底层数据结构使用)的情况那样移动元素.任何更有效的建议.
我有这样的类层次结构Beverage -> Coffee-> Latte.哪里Beverage是abstract超被延长Coffee.Coffee然后类增加了一些行为,但也是abstract.Latte扩展Coffee类,是一个具体的类.我已经使用继承来添加行为.并且继承确实有缺点,如超类方法的可见性,使代码易碎,代码紧密耦合.因此,编程原则Composition应该优先考虑Inheritance.但在这种情况下inheritance感觉如此自然Latte,Coffee并且Coffee是一种类型的Beverage使用composition添加行为感觉错误,尽管它的好处.所以这里的问题是
应该直觉覆盖设计原则吗?
饮料:
public abstract class Beverage {
private final String name;
private final double price;
Beverage(String name, double price){
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public abstract void …Run Code Online (Sandbox Code Playgroud) 我试图找到key最小值,Map如下所示.
Map<Node, Integer> freeMap = new TreeMap<>();
Node minNode = null;
for (Map.Entry<Node, Integer> entry : freeMap.entrySet()) {
if (minNode == null) {
minNode = entry.getKey();
} else {
if (entry.getValue() < freeMap.get(minNode)) {
minNode = entry.getKey();
}
}
}
Run Code Online (Sandbox Code Playgroud)
首先,是否有一种直接的方法来找到key最小的value比使用foreach循环.其次,你能否提出一些可用于存储Node对象和相关Integer值的备用数据结构方法,因此我可以entry在恒定时间O(1)中以最小值获取.
我正在将 Spring Boot 从 1.3 升级到 1.5。为了升级到 1.5 我已经更换了
@SpringApplicationConfiguration(classes = TestConfig.class)
@WebIntegrationTest
和
@SpringBootTest(classes = TestConfig.class)
另外,我正在使用
@Value("${local.server.port}")
protected int port;
获取application.properties文件中定义的端口号。我进一步使用这个端口号来构建一个 REST URL。
但是升级后我收到以下错误,而1.3Spring Boot Test也可以正常工作。
引起:java.lang.IllegalArgumentException:无法在 org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174) 处解析值“${local.server.port}”中的占位符“local.server.port”
我是否错过了为此工作所需的任何更改。
嗨,我正在使用 Travis CI 为Maven应用程序自动化 SonarCloud 上的代码覆盖率。
现在,在sonar:sonar本地运行该命令会在 SoundCloud 上提交报告,我可以使用 Branch 看到它,如下所示master
现在我还配置了.travis.yml文件以在每次构建时自动将报告推送到SoundCloud,如下所示
但是当构建由 Travis CI 触发时,它会失败并出现以下错误
[INFO] Load project branches
[INFO] Load project branches (done) | time=114ms
[INFO] Load project pull requests
[INFO] Load project pull requests (done) | time=116ms
[INFO] Load branch configuration
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 27.884 s
[INFO] Finished at: 2019-05-19T16:47:23Z
[INFO] Final Memory: 93M/496M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal …Run Code Online (Sandbox Code Playgroud) 我的 Web 应用程序的标题中有一个搜索框,并使用自动完成功能来帮助用户按作者姓名或书名查找书籍。根据用户输入,函数通过oninput()调用 servlet 。servlet 调用类的静态方法,该方法返回与输入字符串匹配的书籍数组。FindBooksajaxFindBookssuggest()SuggestionBook
FindBooks.java
JSONArray books = SuggestionBook.suggest(inputString);
out.print(books);
Run Code Online (Sandbox Code Playgroud)
建议书.java
private static boolean isTernaryEmpty = true;
private static Ternary ternary;
private static void fillTernary() {
// fills ternary search tree with data.
isTernaryEmpty = false;
}
public static JSONArray suggest(String searchString) {
if(isTernaryEmpty) {
fillTernary();
}
return ternary.find(searchString);
}
Run Code Online (Sandbox Code Playgroud)
我在类中使用了static方法SuggestionBook.java,以避免为应用程序的每个会话加载数据。因此它只会被加载一次,然后就可以被不同的会话共享。但由于静态方法只有一份副本,并且所有会话都使用相同的static方法来获取数据。当其他会话正在使用该方法时,他们是否必须等待,或者所有会话可以同时访问该方法?如果是,是否会影响应用程序的性能。如果否,JVM 如何管理单个副本的并发访问?最后,根据我的理解,只要类SuggestionBook没有被垃圾收集,数据就会保留在内存中。使用数据结构 as class variablesnot是正确的方法吗instance variables,因为它们会阻塞可用内存更长时间。
java ×7
algorithm ×2
graph ×2
spring-boot ×2
arraylist ×1
autocomplete ×1
big-o ×1
composition ×1
dijkstra ×1
inheritance ×1
interface ×1
linked-list ×1
map ×1
maven ×1
min ×1
sonarcloud ×1
sonarqube ×1
sorting ×1
spring ×1
spring-mvc ×1
spring-test ×1
static ×1
travis-ci ×1