硬件开发工程师应具有哪些知识