Init Commit

This commit is contained in:
2023-09-26 20:01:08 +10:00
commit 3d6f218e2f
11 changed files with 339 additions and 0 deletions

39
.gitignore vendored Normal file
View File

@@ -0,0 +1,39 @@
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store
/.idea/

31
pom.xml Normal file
View File

@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>canva-interview</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.10.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>5.5.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,7 @@
package org.example;
public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}

View File

@@ -0,0 +1,11 @@
package org.example;
import org.example.data.VideoMap;
public interface VideoCache {
void set(String videoId, String videoContent);
String get(String videoId);
VideoMap getData();
}

View File

@@ -0,0 +1,11 @@
package org.example;
import org.example.data.VideoMap2;
public interface VideoCache2 {
void set(String videoId, String videoContent);
String get(String videoId);
VideoMap2 getData();
}

View File

@@ -0,0 +1,23 @@
package org.example;
import org.example.data.VideoMap;
public class VideoCacheImpl implements VideoCache {
private VideoMap data;
public VideoCacheImpl() {
data = new VideoMap();
}
public void set(String videoId, String videoContent) {
data.put(videoId, videoContent);
}
public String get(String videoId) {
return data.get(videoId);
}
public VideoMap getData() {
return data;
}
}

View File

@@ -0,0 +1,23 @@
package org.example;
import org.example.data.VideoMap2;
public class VideoCacheImpl2 implements VideoCache2 {
private VideoMap2 data;
public VideoCacheImpl2() {
data = new VideoMap2();
}
public void set(String videoId, String videoContent) {
data.put(videoId, videoContent);
}
public String get(String videoId) {
return data.get(videoId);
}
public VideoMap2 getData() {
return data;
}
}

View File

@@ -0,0 +1,40 @@
package org.example.data;
public class VideoMap {
String[] data;
String[] keys;
int size;
public VideoMap() {
data = new String[1000];
keys = new String[1000];
size = 0;
}
public void put(String key, String value) {
keys[size] = key;
data[size] = value;
size++;
}
public String get(String key) {
for (int i = 0; i < size; i++) {
if (keys[i].equals(key)) {
return data[i];
}
}
return null;
}
public String[] getData() {
return data;
}
public String[] getKeys() {
return keys;
}
public int getSize() {
return size;
}
}

View File

@@ -0,0 +1,70 @@
package org.example.data;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
public class VideoMap2 {
private Entry[] data;
private int size;
public VideoMap2() {
data = new Entry[1000];
size = 0;
}
public void put(String key, String value) {
int index = getIndexFromKey(key);
Entry entry = new Entry(key, value);
data[index] = entry;
size++;
}
public String get(String key) {
int index = getIndexFromKey(key);
Entry entry = data[index];
if (entry != null && entry.getKey().equals(key)) {
return entry.getValue();
}
return null;
}
public int getSize() {
return size;
}
public Entry[] getData() {
return data;
}
private int getIndexFromKey(String key) {
int hashCode = key.hashCode();
return (hashCode & 0x7FFFFFFF) % data.length;
}
public static class Entry {
String key;
String value;
public Entry(String key, String value) {
this.key = key;
this.value = value;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
}

View File

@@ -0,0 +1,42 @@
package org.example;
import org.example.data.VideoMap;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
public class VideoCacheTest {
private VideoCache videoCache = new VideoCacheImpl();
@Test
public void testSet() {
videoCache.set("0001", "content0001");
VideoMap data = videoCache.getData();
assertEquals(1, data.getSize());
assertEquals("0001", data.getKeys()[0]);
assertEquals("content0001", data.getData()[0]);
}
@Test
public void testGet() {
String value = videoCache.get("0001");
String value2 = videoCache.get("0002");
// assertEquals("content0001", value);
assertNull(value);
assertNull(value2);
}
@Test
public void testGetWithData() {
String value = videoCache.get("0001");
String value2 = videoCache.get("0002");
// assertEquals("content0001", value);
assertNull(value);
assertNull(value2);
}
}

View File

@@ -0,0 +1,42 @@
package org.example;
import org.example.data.VideoMap2;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
public class VideoCacheTest2 {
private VideoCache2 videoCache = new VideoCacheImpl2();
@Test
public void testSet() {
videoCache.set("0001", "content0001");
VideoMap2 data = videoCache.getData();
int index = ("0001".hashCode() & 0x7FFFFFFF) % data.getData().length;
assertEquals(1, data.getSize());
assertEquals("0001", data.getData()[index].getKey());
assertEquals("content0001", data.getData()[index].getValue());
}
@Test
public void testGet() {
String value = videoCache.get("0001");
String value2 = videoCache.get("0002");
assertNull(value);
assertNull(value2);
}
// @Test
// public void testGetWithData() {
// String value = videoCache.get("0001");
// String value2 = videoCache.get("0002");
//
//// assertEquals("content0001", value);
// assertNull(value);
// assertNull(value2);
// }
}