0

正在从事编码练习,我对如何实施解决方案有些困惑。

根据 JavaDoc,我必须实现这个 EmployeeManager 接口。假设员工数据在与其他请求不同的线程中到达。请注意,getSalary() 以恒定时间 O(n) 执行。执行时间不得随员工或部门的数量而变化。

import java.util.List;

/**
 * Manage departments and employees to easily query aggregate data.
 * All methods should be thread-safe.
 */
public interface EmployeeManager {

    /**
     * Create a new department with the given name and the given parentId. 
     * The department name need not be unique.
     * 
     * @param departmentName
     *            the name of the new department.
     * @param parentId
     *            the parent department or null if no parent
     * @return the ID of the newly created department
     * @throws RuntimeException
     *             if the parent department (if not null) does not exist
     */
    public int newDepartment(String departmentName, Integer parentDepartmentId);

    /**
     * Create a new employee with the given ID 
     * and given parent department (if any).
     * 
     * @param employeeId
     *            the new employee's ID
     * @param parentdepartmentId
     *            the parent department or null if no parent
     * @throws RuntimeException
     *             if the employee or parent department (if not null) does not exist
     */
    public void newEmployee(int employeeId, Integer parentdepartmentId);

    /**
     * Return a list of department IDs that are 
     * direct children of the given parent. 
     * 
     * Null is a valid value for parent.
     * 
     * @param departmentId
     *            the parent department ID
     * @return a list of child department IDs
     * @throws RuntimeException
     *             if the department does not exist
     */
    public List<Integer> getDepartments(Integer departmentId);

    /**
     * Return a list of employee IDs that are direct children of the given parent. 
     * Null is a valid value for parent.
     * 
     * @param departmentId
     *            the parent department ID
     * @return a list of child employee IDs
     * @throws RuntimeException
     *             if the department does not exist
     */
    public List<Integer> getEmployees(Integer departmentId);

    /**
     * Move the given department to the new parent.
     * 
     * @param departmentId
     *            the ID of the department to move
     * @param parentDepartmentId
     *            the new parent. The new parent department 
     *            -- if the id is not null -- must exist, and
     *            must not create a cyclic graph.
     * @throws RuntimeException
     *             if a cyclic graph would be created or
     *             the department or parent department does not exist
     */
    public void moveDepartment(int departmentId, Integer parentDepartmentId);

    /**
     * Move the given employee to the new parent.
     * 
     * @param employeeId
     *            the ID of the employee to move
     * @param parentDepartmentId
     *            the new parent. The new parent department 
     *            -- if the id is not null -- must exist.
     * @throws RuntimeException
     *             if the employee or parent department 
     *             (if not null) does not exist
     */
    public void moveEmployee(int employeeId, Integer parentDepartmentId);

    /**
     * Return the name of the given department.
     * 
     * @param departmentId
     *            the department ID
     * @return the department name
     * @throws RuntimeException
     *             if the department does not exist
     */
    public String getName(int departmentId);

    /**
     * Return the current aggregate salaries of 
     * all employees in the given department
     * 
     * (including all employees in all child departments).
     * 
     * Must execute in constant time O(n).
     * 
     * @param departmentId
     *            the department ID
     * @return the aggregate salary or return null if no employees
     * @throws RuntimeException
     *             if the department does not exist
     */
    public Double getSalary(int departmentId);

    /**
     * New data has arrived from the given employee. 
     * If new data arrives for an unknown employee, then
     * create this employee with parent department null.
     * 
     * @param employeeId
     *            the employee ID
     * @param salary
     *            the new salary
     * @throws RuntimeException
     *             if the employee does not exist
     */
    public void newEmployeeData(int employeeId, double salary);
}

问题):

  1. 这是什么类型的问题?

  2. 我应该将 Employee 和 Department 类创建为 POJO,里面会有什么?他们是否必须实现 runnable 才能实现线程安全?

  3. 这需要什么类型的数据结构?

我对我的数据结构和 CS 的东西真的很生疏,所以非常感谢任何反馈。

4

0 回答 0